Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2018
duco duco is offline
Registrado
 
Registrado: oct 2011
Posts: 4
Poder: 0
duco Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 20-12-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por duco Ver Mensaje
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 20-12-2018
duco duco is offline
Registrado
 
Registrado: oct 2011
Posts: 4
Poder: 0
duco Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 21-12-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 21-12-2018
duco duco is offline
Registrado
 
Registrado: oct 2011
Posts: 4
Poder: 0
duco Va por buen camino
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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Stored Procedure gluglu Conexión con bases de datos 16 24-02-2011 17:41:24
Stored Procedure !!! Ledian_Fdez C++ Builder 0 02-03-2010 14:01:29
Stored Procedure StartKill MySQL 2 27-08-2008 06:18:44
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33


La franja horaria es GMT +2. Ahora son las 04:04:41.


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
Copyright 1996-2007 Club Delphi