Devolver una tabla PL con ref cursor
Hola!!
Tengo una tabla PL y la quiero devolver en un procedimiento con un REF CURSOR, pero no se como se hace ni si se puede hacer...
es posible? como seria?
Tengo una tabla PL y la quiero devolver en un procedimiento con un REF CURSOR, pero no se como se hace ni si se puede hacer...
es posible? como seria?
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;
-- 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;
