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)
-   -   Modificando Stored Procedure (https://www.clubdelphi.com/foros/showthread.php?t=93649)

duco 19-12-2018 23:36:43

Modificando Stored Procedure
 
Buenas noches.
Puedo modificar un Stored procedure con una sentencia SQL iniciada por ALTER PROCEDURE en un Tibquery finalizando con execsql.

Normalmente pruebo la sentencia desde IBexpert y luego la inyecto en el programa Delphi.
En esta ocasión uso 'execute procedure' para ejecutar otro procedimiento dentro del modificado
Desde IBexpert va bien
Pero desde delphi me retorna un error -104, precisamente al ejecutar con execsql el tibquery que modifica el stored procedure justo por el execute procedure

¿A alguien le ha pasado esto?
¿hay mas opciones para modificar un SP desde código Delphi?

Muchas gracias

Un saludo

ecfisa 20-12-2018 18:54:21

Hola.
Cita:

Empezado por duco (Mensaje 530066)
Puedo modificar un Stored procedure con una sentencia SQL iniciada por ALTER PROCEDURE en un Tibquery finalizando con execsql.

Si es una pregunta, la respuesta es si.

Un ejemplo usando el componente TIBSQL:
Código Delphi [-]
...
begin
  IBSQL1.Close;
  IBSQL1.SQL.Clear;
  IBSQL1.SQL.Add('CREATE OR ALTER PROCEDURE CONT( CANT INTEGER )');
  IBSQL1.SQL.Add('RETURNS( RESULT INTEGER )');
  IBSQL1.SQL.Add('AS');
  IBSQL1.SQL.Add('BEGIN');
  IBSQL1.SQL.Add('  WHILE ( CANT > 0 ) DO');
  IBSQL1.SQL.Add('  BEGIN');
  IBSQL1.SQL.Add('    RESULT = CANT;');
  IBSQL1.SQL.Add('    CANT = CANT - 1;');  // antes: CANT = CANT - 2
  IBSQL1.SQL.Add('    SUSPEND;');
  IBSQL1.SQL.Add('   END');
  IBSQL1.SQL.Add('END');
  IBSQL1.ExecQuery;
end;

Saludos :)

duco 20-12-2018 23:33:04

Modificacion de un estored procedure con tibquery
 
Buenas tardes, ecfisa, agradezco tu contestación.

Normalmente es así, tal y como dices.

tengo algunos estored procedures definidos de manera que se anidan y se pueden llamar con la sentencia 'Execute procedure'

ej:

BEGIN
if(cod=0) then
execute procedure damecodigo returning values código;



De forma, al dar un alta o modificación se diferencia en el valor del código, 0, alta y otro procedimiento 'damecodigo' busca un código único

Y así varios mas.


Cuando intento modificar uno de estos procedimientos con otros anidados desde ibexpert va todo bien

Pero si intento modificarlo tal y como planteas con un tibsql ---- retorna un error en ejecución -104 al encontrar la palabra 'execute….


No se porqué ocurre esto, pero ¿hay alguna otra forma de modificar un stored desde código Delphi?


Un saludo

ecfisa 21-12-2018 19:54:47

Hola.

El código de error SQLCODE -104, puede ser provocado por varios motivos: SQLCODE and GDSCODE Error Codes and Descriptions.
Revisa cuál de las descripciones de los códigos GDSCODE se aproxima mas al error que pueda estar generando tu código SQL; mas no te puedo decir sin haberlo visto.


Sin embargo, hice dos procedimientos muy elementales para poder probar la modificación del procedimiento cuando existe la declaración EXECUTE PROCEDURE y desde Delphi se modifica sin generar errores:
Código Delphi [-]
...
begin
  IBSQL1.Close;
  IBSQL1.SQL.Clear;
  IBSQL1.SQL.Add('CREATE OR ALTER PROCEDURE FOO_MAIN( CANT INTEGER )');
  IBSQL1.SQL.Add('RETURNS( RESULT INTEGER )');
  IBSQL1.SQL.Add('AS');
  IBSQL1.SQL.Add('BEGIN');
  IBSQL1.SQL.Add('  WHILE ( CANT > 0 ) DO');
  IBSQL1.SQL.Add('  BEGIN');
  IBSQL1.SQL.Add('    RESULT = CANT;');
  IBSQL1.SQL.Add('    CANT = CANT - 1;');  // antes: CANT = CANT - 2;
  IBSQL1.SQL.Add('    EXECUTE PROCEDURE FOO( CANT );');
  IBSQL1.SQL.Add('    SUSPEND;');
  IBSQL1.SQL.Add('   END');
  IBSQL1.SQL.Add('END');
  IBSQL1.ExecQuery;
end;

Si tuviera que aventurar un motivo, revisaría el código en busca de alguna dependencia que lo pudiera provocar.

Saludos :)

duco 21-12-2018 21:57:00

Modificacion de un estored procedure con tibquery
 
Muchas gracias, ecfisa.

Realmente te lo agradezco, me relaja observar cómo es posible modificar un stored que anide con 'execute procedure'.

Tiene que haber alguna dependencia que no he localizado.

Como imaginas estoy modificando un código que funcionando ha de evolucionar y curiosamente he encontrado el sistema para sin modificar los Stored, lograr la funcionalidad precisada.

Era el caso de eliminar una serie de campos de las tablas y añadir otros.
He generado las nuevas tablas y los nuevos campos y los nuevos stored y
No he eliminado los viejos campos y les asigno valores por defecto que no usaré, sin eliminar las columnas

Así evito reconstruir las tablas y los stored, que van muy bien y es asumible el incremento de tamaño de datos


Muchas gracias

Un saludo


La franja horaria es GMT +2. Ahora son las 09:20:52.

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