Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Actualización columnas "dinámicas" en Store Procedure (https://www.clubdelphi.com/foros/showthread.php?t=65850)

fjcg02 17-01-2010 21:44:08

Actualización columnas "dinámicas" en Store Procedure
 
Hola a todos,
alguien conoce alguna manera de actualizar con un procedimiento almacenado una columna de una tabla que dependa de un parámetro?

Algo así como esto...

Código SQL [-]
CREATE OR ALTER PROCEDURE SP_PRUEBA (
    IDREGISTRO INTEGER,
    CAMPO VARCHAR(15),
    VALOR VARCHAR(20))
AS
BEGIN
  /* Procedure Text */
  
  UPDATE TABLA SET :CAMPO=:VALOR  WHERE IDREGISTRO=:IDREGISTRO;

  SUSPEND;
END^

Gracias y un saludo

fjcg02 18-01-2010 09:57:48

Hola,
lo he conseguido haciendo esto, pero..
Código SQL [-]
CREATE OR ALTER PROCEDURE SP_PRUEBA (
    IDREGISTRO INTEGER,
    CAMPO VARCHAR(15),
    VALOR DATE)
AS
  DECLARE SENTENCIA VARCHAR(100);
BEGIN
  /* Procedure Text */
   SENTENCIA= 'UPDATE TABLA SET '||:CAMPO ||'= '||CAST(FECHA AS VARCHAR(15))|| ' WHERE IDREGISTRO = '|| CAST(IDREGISTRO AS VARCHAR(10));

   EXECUTE STATEMENT SENTENCIA
   SUSPEND;
END^

Ahora bien, tengo un problema
SENTENCIA tiene lo siguiente con parámetros 20, FECHAINICIO y 17/01/2010
UPDATE TABLA SET FECHAINICIO = 2010-01-17 WHERE IDREGISTRO= 20

Si ejecuto es SP desde el ibexpert, y me funciona. Si la copio y la ejecuto desde la consola SQL del ibexpert también.

Si ejecuto el SP desde el programa delphi, me falla. Creo que tengo bien realizada la llamada, pero no me ha dado tiempo a revisarla.

Esta noche lo reviso y os cuento, porque en teoría, tendría que funcionar.

Un saludo

Nota: Igual la sintaxis está mal, ya que he escrito el SP 'a pelo' porque realmente es bastante más complejo que este ejemplo.

fjcg02 19-01-2010 08:44:20

Hola a todos,
finalmente he arreglado el error de la llamada desde Delphi al procedimiento almacenado.
No sé porqué, se había quedado 'tonto', pesar de que la llamada era correcta.

Borrándolo y creándolo de nuevo, sin tocar nada más, el resultado es el correcto.

Saludos


La franja horaria es GMT +2. Ahora son las 18:17:56.

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