Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema con Update y StoredProc (https://www.clubdelphi.com/foros/showthread.php?t=43383)

Stilgar 09-05-2007 22:05:00

Problema con Update y StoredProc
 
Buenas!

Estoy intentando hacer un Update con un StoredProc de Oracle y no se muy bien como funciona. Hago algo asi:

OraStoredProc1.Close;
OraStoredProc1.SQLUpdate.Clear;
OraStoredProc1.SQLUpdate.Add('UPDATE accion SET accion.estado= 1 where accion.estado=8');
OraStoredProc1.Execute;
OraStoredProc1.CommitUpdates;

pero me pide el nombre del procedimiento almacenado; es una actualización puntual y no la tengo almacenada en la BBDD

¿No es posible asignarle el nombre en tiempo de ejecucion?

Gracias de antemano.
Un saludo

Lepe 10-05-2007 12:23:56

Creo que estas mezclando conceptos.

Si "accion" es una tabla, entonces no hace falta un Store Procedure. el SQL lo pones en un Query, lo ejecutas con ExecQuery y listo.

Saludos

Stilgar 14-05-2007 22:03:22

Gracias por tu respuesta Lepe,
me funcionó pero ahora tengo otro problemilla con un UPDATE que quiero hacer. En realidad no se si la forma de la consulta es la correcta.

Quiero hacer un UPDATE de unos campos de forma aleatoria de esta manera:

Código SQL [-]UPDATE [SELECT top 100 LLAMADAS.estado, LLAMADAS.agente FROM LLAMADAS, CLIENTES WHERE (estado=8) AND (LLAMADAS.idcliente = CLIENTES.id) order By Rnd(LLAMADAS.idcliente)] SET LLAMADAS.estado=0, LLAMADAS.AGENTE = Null WHERE (LLAMADAS.estado=8)


El error me dice 'Invalid Table Name' como si no me cogiera bien el Select dentro del Update.

¿Sabeis que puede pasar?

Gracias!!!
Un saludo

Delphius 14-05-2007 22:11:40

No será...
 
Código SQL [-]
UPDATE [SELECT top 100 LLAMADAS.estado, LLAMADAS.agente FROM LLAMADAS, CLIENTES WHERE (estado=8) AND (LLAMADAS.idcliente = CLIENTES.id) order By Rnd(LLAMADAS.idcliente)] SET LLAMADAS.estado=0, LLAMADAS.AGENTE = Null WHERE (LLAMADAS.estado=8)

Porqué los corchetes?
No es con paréntesis... a lo mejor ese es el problema.

Código SQL [-]
UPDATE (SELECT top 100 LLAMADAS.estado, LLAMADAS.agente FROM LLAMADAS, CLIENTES WHERE (estado=8) AND (LLAMADAS.idcliente = CLIENTES.id) order By Rnd(LLAMADAS.idcliente)) SET (0, Null) WHERE (LLAMADAS.estado=8)

No he probado la sentencia SQL pero ha decir verdad nunca he visto una que admita corchetes.

Saludos,

Stilgar 15-05-2007 19:51:24

Hola y gracias por tu respuesta Delphius.

Parece ser que el problema era con los corchetes porque ya no me da el error de 'Invalid table name' pero ahora me da un error diferente: 'FROM keyword not found where expected'...

¿sabeis a que es debido???

un saludo y gracias!!!

Stilgar 15-05-2007 21:30:01

Hola,

me contesto yo mismo... en Oracle no se permite la sentencia TOP por eso me daba el primer error de 'Invalid Table Name' y el segundo de 'FROM...'.
hay una función que hace hace lo mismo que es:

ROWNUM <= x

y se pone en el where.

Es decir, para hacer algo asi en Oracle

Código SQL [-]
size="2">SELECT TOP 10 product, descr, email 
FROM products 


lo haremos de esta manera:

Código SQL [-]
size="2">SELECT product, descr, email
FROM products 
WHERE ROWNUM <= 10


Gracias por la ayuda!!
Un saludo


La franja horaria es GMT +2. Ahora son las 10:24:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi