FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Ejecutar un store procedure dinamico en DB2
Hola mi nombre es daniel y queria saber si alguien me puede decir si puedo ejecutar un query dinamico. Me comentaron que se puede meter el sql en un string y concatenar la variante dinamica .... pero no se si esto es tan asi y mediante que comandos puedo ejecutar el string_sql ....
Saludos y Gracias. |
#2
|
||||
|
||||
La verdad, el título del mensaje no se corresponde mucho con la pregunta, no sé si me pierdo algo.
Hay 2 formas de hacerlo, en ambas tienes que partir de un componente Query, (TQuery, TIBQuery, TMDOQuery... depende de tu base de datos): - El rompecabezas, es igual que armar un puzzle. Como ves, tienes que tener en cuenta todos los espacios en blanco, las uniones de unas cadenas con otras, etc. Basta un error de un paréntesis para que todo se vaya al traste. - Por parámetros: Partimos de la base que sabemos cuantos parámetros se van a usar en la búsqueda, preparamos en el TQuery un sql así: Ahora en delphi:
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
|||
|
|||
Ok, muchas gracias, pero la verdad que lo que tengo que hacer es mucho mas complicado de lo que me parecia.
El contenido original del store es el que tengo marcado en rojo y en negrita, lo que tengo que hacer es cambiar el order by de acuerdo del ID_COMERCIO. Lo marcado en azul e italica es lo nuevo. La verdad que no se me ocurre como hacerlo de forma dinamica o concatenando el order by en un string y luego ejecutarlo con EXEC. Si alguien me puede dar una mano se lo agradecere mucho .... Tengo el sgte store procedure .... create procedure desa01.prueba0 (in ID_USUARIO char(20), IN ID_COMERCIO integer, IN ID_ENTIDAD decimal(10), in ID_SUCURSAL decimal(10)) dynamic result sets 1 language sql begin declare c1 cursor with return for with cuits_habilitados(cuit) as(select cuit from table(desa01.TKNS002(id_usuario)) as cuits), paises_habilitados(pais) as(select pais from table(desa01.TKNS003(id_usuario)) as paises) select d.sucursal_comercio, d.digito_verificador, d.denominacion, d.cuit, d.ramo_comercio, d.descripcion_ramo, d.unificadora, d.sucursal_entidad, d.baja, d.nombre_entidad, d.nombre_sucursal from desa01.TKT039 c,table(desa01.TKN0003(c.sucursal_comercio)) as d where c.SUCURSAL_COMERCIO>=ID_COMERCIO and d.unificadora>=ID_ENTIDAD and d.sucursal_entidad>=ID_SUCURSAL and ( (desa01.TKNS001(id_usuario)='I' and c.pais in (select pais from paises_habilitados)) or (desa01.TKNS001(id_usuario)='C' and c.cuit in (select cuit from cuits_habilitados)) or (desa01.TKNS001(id_usuario)='B' and (select u.cuit from desa01.tkv070 u where u.unificadora=d.unificadora ) in (select cuit from cuits_habilitados)) ) order by d.unificadora, sucursal_entidad, d.sucursal_comercio fetch first 201 rows only;-- open c1;-- if ID_COMERCIO = 0 then // ordena el query por // d.unificadora,d.sucursal_entidad,d.sucursal_comercio else // ordena el query por // d.sucursal_comercio, d.unificadora, d.sucursal_entidad end if;-- end; |
#4
|
||||
|
||||
la ejecución de consultas dinámicas en Db2 se hace de la siguiente manera:
Por cierto deberias indentar tus consultas, para hacer más sencilla su lectura
__________________
Conoce mi blog http://www.edgartec.com |
#5
|
|||
|
|||
Ok, gracias por la info, pero no se si realmente me sirve porque en el query aparece el un declare cursor, dinamico y no se como hacer esto que me comentas del query dinamico si esta relacionado con el declare cursor. Se puede declarar un cursor vacio y despues cargarlo con el sql dinamico ?
En cuanto a la indentacion,creeme que al copiarlo y pegarlo lo dejo asi, no es mi manera de indentar ni mucho menos |
#6
|
||||
|
||||
Ok, como sabes, en db2/400 los recordsets deben ser declarados en un cursor, de tal manera que al hacer el open, el Sp devolverá los resultados.
Esto funciona así con las consultas definidas, pero en tu caso al ser una consulta dinámica, la función del cursor la hace el prepare. . Puedes checar la documentación de Db2 en el Sitio de Ibm, con respecto al prepare y al exec. y veras que es como te lo acabo de ejemplificar. Suerte.
__________________
Conoce mi blog http://www.edgartec.com |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Store procedure php | jorgito | MySQL | 1 | 06-06-2006 08:55:12 |
Store Procedure en intebase | jgutti | Firebird e Interbase | 2 | 12-05-2006 15:12:55 |
Sql dinamico en procedure | StartKill | Firebird e Interbase | 4 | 27-11-2004 16:04:54 |
Cómo poder ejecutar un Store Procedure(Prodecimiento alamcenado) | thecarlos | Varios | 1 | 08-01-2004 23:36:49 |
store procedure | ronimaxh | Firebird e Interbase | 2 | 24-06-2003 20:20:22 |
|