Como sacar la informacion de una variable tipo cursor

irasemar
20 de Noviembre del 2008
Mire . mi pregunta es la siguiente yo necesito desplegar un campo en pantalla que se encuentra en un paquete en la base de datos y este paquete hace un llamado a un procedimiento que tiene variables de entrada y otras de salida la que me interesa esta en una variable tipo cursor y no puedo sacar la informacion que se escuentra en el cursor.

Rodolfo Reyes
20 de Noviembre del 2008
Con este peque帽o c貌digo explico como mostrar un refcursor desde Pl/sql, muy 霉til para cuando necesitas comprobar datos, o simplemente procesarlos

-- Creado pro Hector Gabriel Ulloa Ligarius
-- 27 de Julio del 2005
-- Como mostrar un refcursor desde PL/SQL

--------------------
--C贸digo del package
--------------------

create or replace PACKAGE ejemplo_package IS
--Declaro el tipo ref cursor
TYPE var_refcursor IS REF CURSOR;

--Declaro la funci贸n que retorna el ref cursor
FUNCTION retorna_datos RETURN var_refcursor;
END ejemplo_package;
/

create or replace PACKAGE BODY ejemplo_package IS

FUNCTION retorna_datos RETURN var_refcursor IS
var_cursorpackage var_refcursor;

BEGIN
OPEN var_cursorpackage FOR
SELECT table_name ,
tablespace_name
FROM user_tables
WHERE rownum < 10 --S贸lo muestro 9 , pues es un ejemplo
;

RETURN var_cursorpackage;
END;
END ejemplo_package;
/

----------------------------
--C贸digo de un bloque Pl/Sql
----------------------------
declare

--Declaraci贸n de la variable de tipo REF CURSOR
v_refcursor ejemplo_package.var_refcursor;

--Declaraci贸n de variables para dejar los valores rescatados desde el REF CURSOR
vtable_name varchar2(1000);
vtablespace_name varchar2(1000);

begin
--Se llama al package que retorna los datos desde un cursor
v_refcursor := ejemplo_package.retorna_datos;

--Se rescata el valor desde elref cursor haciendo un fetch
FETCH v_refcursor
INTO vtable_name ,
vtablespace_name;

WHILE v_refcursor%FOUND LOOP
dbms_output.put_line('Nombre : '||vtable_name||' ,Tablespace : '||vtablespace_name);
FETCH v_refcursor
INTO vtable_name ,
vtablespace_name;
END LOOP;

--Se cierra el cursor que fue abierto al momento de realizar la llamada al package
CLOSE v_refcursor;
end;