Oracle - PL/SQL REF CURSOR

 
Vista:

PL/SQL REF CURSOR

Publicado por Miguel A. (1 intervención) el 08/08/2002 17:41:18
Hola, tengo un problema (evidente), a ver si me podéis iluminar.

Estoy haciendo un pl/sql con un objeto del tipo ref cursor para poder enviarlo a un report e imprimirlo. Hasta aquí bien, el problema viene a la hora de llenar de datos este ref cursor, que no puedo hacer con un simple select (open cursor for select...) puesto que mis registros vendrán datos tras varias comparaciones entre otros cursores, de forma que yo entro en un bucle donde voy decidiendo qué registros deben imprimirse y qué registros no. Si para cada item del bucle yo hago un (open cursor for select dato1, dato2 from dual) solo me deja en el cursor el último registro, deshechándome los anteriores. ¿Existe algún modo de que no me destruya el objeto e ir añadiendo registros?

Gracias,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Open, Open, Open..

Publicado por Jorge (60 intervenciones) el 08/08/2002 18:42:55
Bueno lo que pasa es que cada vez que haces un Open,.. vuelves a llenar la Varabile de Cursor,... por éso siempre te deja la Última,.. yo te recomendaría que crees una tabla Dinamica.. y si quieres despues puedes llenar tu Cursor y pasarlo al Reporte.

O .. no se si te pueda servir éste ejemplo para que puedas armar dinamicamente tu Query de otra manera :

The DEMO procedure deletes all of the employees from the EMP table whose salaries are greater than the salary that you specify when you run DEMO.

CREATE OR REPLACE PROCEDURE demo(salary IN NUMBER) AS
cursor_name INTEGER;
rows_processed INTEGER;
BEGIN
cursor_name := dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, 'DELETE FROM emp WHERE sal > :x',
dbms_sql.native);
DBMS_SQL.BIND_VARIABLE(cursor_name, ':x', salary);
rows_processed := dbms_sql.execute(cursor_name);
DBMS_SQL.close_cursor(cursor_name);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(cursor_name);
END;


Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar