Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Cursor SQL sobre tablas de nombres variables


Nino
10 de abril de 2021, 02:16
Hola apreciados colegas.
Necesito realizar un cursor SQL que realice una consulta sobre tablas que tienen nombres distintos pero igual estructura de datos (mismas columnas).
Es el típico proceso de datos almacenados en tablas de uso mensual (liquidaciones por ejemplo), respecto de las cuales necesito realizar una búsqueda según cierta lógica de control.
En cobol basta con asignar el nombre al archivo definido en la select:
SELECT OPTIONAL LIQSUE ASSIGN TO IDF-LIQSUE
...
Y , en el perform antes de abrir el archivo se le asigna un nombre según la lógica requerida,por ejemplo:
PERFORM VARYING GLOBAL-ANO FROM 2015 BY 1 UNTIL GLOBAL-ANO > 2021
PERFORM VARYING GLOBAL-MES FROM 1 BY 1 UNTIL GLOBAL-MES > 12
MOVE SPACES TO IDF-LIQSUE
STRING GLOBAL-ANO GLOBAL-MES 'LiqSue' DELIMITED SIZE INTO IDF-LIQSUE *> el nombre del archivo o tabla sería -por ejemplo- "202103LiqSue"
OPEN INPUT LIQSUE
PERFORM PROCESA-CONSULTA *> Lógica asociada a la consulta
CLOSE LIQSUE
END-PERFORM
END-PERFORM

... Entonces, el cursor SQL que se requiere, debe procesar nombres de tablas dinámicos (variables) que se diferencian entre sí SÓLO POR EL NOMBRE pero, que contienen datos relativos al periodo de proceso hurgado.

He probado creando las consultas en campos de texto, usando el los comandos SQL embebidos PREPARE y EXECUTE más, sin éxito hasta ahora.

Saludos cordiales para todos y los mejores deseos de salud !!!
Atte. Nino.
PD: GRACIAAAAAAAAAAAAAAASSSSSS !!!!!!

Kuk
10 de abril de 2021, 11:19
@Nino, hola bienvenido.

Lo primero, dinos con qué compilador trabajas.

Lo segundo, todo código SQL, sea embebido o no, trabaja con "punteros" hacía los recursos de la BBDD.

Si tabajas con SQL embebido, no habrá más remedio que declarar 2 cursores. Si trabajas con ODBC/JDBC, la cosa puede cambiar. Y si trabajas con controles tipo ADO etc, es aún otra historia.

Así que danos más datos.

Nino
10 de abril de 2021, 14:07
Gracias KUK.
Me declaro un completo ignorante, ávido de conocimientos y, lejos de llegar a incomodar de una a los foreros, dedico muchas horas a estudiar antes de preguntar (intentando descubrir la pólvora).
Utilizo SQL embebido, y POWERCOBOL 9.
No existe forma de expresar mis agradecimientos, por el valioso tiempo que me dedicas, excepto ponerme a tu disposición y a la de los demás colegas para siempre colaborar el lo que más pueda.
Saludos cordiales.
Nino.

Kuk
10 de abril de 2021, 19:48
@Nino, nos alegramos siempre de tener compañeros nuevos.
No dudes en preguntarnos todo lo que necesites.

En cuanto a tu problema, no te queda otra que declarar 2 cursores diferentes y trataros individualmente cada uno.
Puedes tenerlos ambos abiertos al mismo tiempo etc. sin problemas y tratarlos en los bucles anidados. Pero deben ser declarados por separado con nombres diferentes. ;)

Nitzer
14 de abril de 2021, 23:20
Hola a todos, @Nino no veo el problema, eso que comentas que haces en cobol con ficheros lo puedes hacer exactamente igual en Tablas de una BBDD.
Dinamicamente puedes cambiar el nombre de la tabla y que el proceso sea exactamente el mismo.

Estoy casi seguro que te he entendido y lo veo exactamente igual.
Yo tengo sentencias que para construirlas igual tengo 40 líneas de código, todo completamente dinámico.