Recogida de datos desde Delphi sobre Oracle
Estoy migrando mi aplicación Delphi 5 de InterBase a Oracle y desearía saber si existe una estructura parecida a la de InterBase.
En InterBase los Procedures pueden tener parámetros de retorno como las funciones de PL/SQL en Oracle, pero además puedes definir un conjunto de parámetros de retorno y entonces hacer un bucle en el procedure de tipo FOR ... DO
Y a cada iteración del bucle hacer un SUSPEND que te devuelve un registro con todos los parámetros definidos de salida, así consigues que desde Delphi se vea una tabla completa con los campos definidos por los parámetros de retorno sólo con una llamada al procedure.
Consigo hacer lo mismo atacando Oracle con una función PL/SQL que me retorna un Cursor por referencia ( REF CURSOR ), esto me funciona perfectamente en caso que desee una fila como respuesta o un conjunto de filas que se extraen de una sentencia Select SIN MODIFICARLAS !
En cambio en InterBase puedo añadir código después del DO y antes del SUSPEND de forma que las filas de salida están modificadas. Con los cursores Oracle esto no lo he logrado hacer.
Por otro lado en InterBase puedo utilizar llamadas a los procedures en la clausula FROM de las sentencias SELECT dado que me devuelven una tabla como ya he expuesto antes, en Oracle tampoco lo he logrado.
En conclusión, ¿cómo haces para recuperar desde Delphi 5 un conjunto de datos ( tabla ) que provienen de una sentencia SELECT MODIFICADA?.
Te envío un ejemplo de lo que se puede hacer en InterBase:
CREATE PROCEDURE PRUEBA RETURNS (TIPODOC)
AS
Begin
FOR
SELECT TABLA.TIPODOC,
FROM TABLA
INTO :TIPODOC
DO
:TIPODOC = :TIPODOC * 2;
SUSPEND;
END
Este procedimiento devuelve TODOS los valores del campo TIPODOC de la tabla TABLA multiplicados por dos y puedo usarlo así:
SELECT *
FROM PRUEBA
WHERE TIPODOC = 200;
En InterBase los Procedures pueden tener parámetros de retorno como las funciones de PL/SQL en Oracle, pero además puedes definir un conjunto de parámetros de retorno y entonces hacer un bucle en el procedure de tipo FOR ... DO
Y a cada iteración del bucle hacer un SUSPEND que te devuelve un registro con todos los parámetros definidos de salida, así consigues que desde Delphi se vea una tabla completa con los campos definidos por los parámetros de retorno sólo con una llamada al procedure.
Consigo hacer lo mismo atacando Oracle con una función PL/SQL que me retorna un Cursor por referencia ( REF CURSOR ), esto me funciona perfectamente en caso que desee una fila como respuesta o un conjunto de filas que se extraen de una sentencia Select SIN MODIFICARLAS !
En cambio en InterBase puedo añadir código después del DO y antes del SUSPEND de forma que las filas de salida están modificadas. Con los cursores Oracle esto no lo he logrado hacer.
Por otro lado en InterBase puedo utilizar llamadas a los procedures en la clausula FROM de las sentencias SELECT dado que me devuelven una tabla como ya he expuesto antes, en Oracle tampoco lo he logrado.
En conclusión, ¿cómo haces para recuperar desde Delphi 5 un conjunto de datos ( tabla ) que provienen de una sentencia SELECT MODIFICADA?.
Te envío un ejemplo de lo que se puede hacer en InterBase:
CREATE PROCEDURE PRUEBA RETURNS (TIPODOC)
AS
Begin
FOR
SELECT TABLA.TIPODOC,
FROM TABLA
INTO :TIPODOC
DO
:TIPODOC = :TIPODOC * 2;
SUSPEND;
END
Este procedimiento devuelve TODOS los valores del campo TIPODOC de la tabla TABLA multiplicados por dos y puedo usarlo así:
SELECT *
FROM PRUEBA
WHERE TIPODOC = 200;
4 Respuestas
Respuesta de nmanas
1
Respuesta
1
Respuesta de jakare
1
Respuesta de ssmo
1