Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   oracle bloques anonimos que devuelvan registros (https://www.clubdelphi.com/foros/showthread.php?t=87449)

fjcg02 08-01-2015 09:19:47

oracle bloques anonimos que devuelvan registros
 
Buenos días,
tengo un problemilla que seguro que alguno me puede echar una mano.

Situación:
Exploto dos sistemas:
- SQLServer
- Oracle

Utilizo ADO, concretamente ADOQuery en los dos casos.

Con SQLServer ( concretamente su PL/SQL) me permite utilizar en las querys variables, cursores, ... Por lo tanto en la misma query declaro una tabla temporal, variables, cursores, hago lo que necesito, lo cargo en la tabla temporal y devuelvo una select de la tabla declarada. Perfecto.

Con Oracle, sólo puedo hacer querys simples. No puedo utilizar variables, ni nada de nada, sólo lo que es una select más o menos compleja.

He visto que con oracle se pueden ejecutar bloques anónimos. Se escriben , se ponen en una ADOQuery y se ejecutan. Pero yo lo que necesito es que el resultado sea un conjunto de registros, es decir, como una query.

No puedo tocar la bbdd, por eso tengo que ejecutar fuera de ella todo lo que necesito.

Alguien ha tenido el mismo problema ? En caso afirmativo, cómo lo ha resuelto?

Os aviso que sólo quiero programar bloques de PL/SQL, no puedo meter lógica en delphi.

Gracias y un saludo.

PD: Os explico un pequeño ejemplo de lo que necesito:
Con una select recupero uno cientos de registros. Por cada registro necesito calucular un dato en base a datos de otra tabla. Monto todo en una tabla temporal, y hago una select de la misma que obtiene los resultados que necesito. Este resultado se visualiza en un clientdataset, que presnto en pantalla, imprimo, vuelco a excel, ....
Todo son lecturas, no hago ninguna actualización de datos.
No puedo utilizar ninguna herramienta diferente, y utilizo ADO porque me permite conectarme via odbc a multiples orígenes de datos.

elrayo76 20-01-2015 21:55:44

Hola,

Lo que te propongo y te puede servir es usar cursores para levantar los datos de la primer tabla y hacer el cálculo que necesitas. Luego recorres ese cursor y lo vas cargando en la tabla temporal. Con los datos en esa tabla haces el select que necesitas listo.

En este momento no tengo a mano el enlace de Oracle donde explica como usar cursores, pero ingresa en su sitio y busca que hay mucha información ahí.

Saludos,
El Rayo

fjcg02 21-01-2015 09:51:33

Gracias por responder, elrayo76

mi pregunta es más concreta:
COn una query ADO puedo hacer todo esto? es decir, crear la tabla temporal, definir el cursor, recorrerlo, hacer algún cálculo y mostrar los registros?

Lo pregunto porque en SQLServer sí se puede.

La dificultad no es programar el proceso, sino que funcione. Esto lo necesito así porque en la aplicación que tengo "mezclo" datos de varios sistemas. La conexióna los mismos la hago vía odbcs varios definidos en el equipo desde donde se lanzan los procesos.

Espero haberme explicado bien, ya que el contexto es el que me condiciona.

Gracias de nuevo


La franja horaria es GMT +2. Ahora son las 11:46:08.

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