En algunos desarrollos necesitamos que una
consulta (Cursor) sea utilizada en más de un procedimiento o función, para esto
realizamos un refCursor, esto es una
función la cual retorna una consulta por medio del tipo de variable SYS_REFCURSOR.
Ejemplo:
Se necesita retornar los valores que contiene la tabla dummy utilizando un
refCursor.
--Creación
de la función que contiene el select
create or replace function prueba_ref_cursor return SYS_REFCURSOR is
cursorRetornado SYS_REFCURSOR;
begin
open cursorRetornado for --Abre la consulta
select dummy
from dual;
return cursorRetornado; --retorna la consulta
end prueba_ref_cursor;
En este
bloque anónimo se realiza el llamado a al refCursor, para esto se utilizan las
instrucciones del cursor Fetch, Into y
Close, la instrucción Open se
ejecuta en el refCursor.
--Llamado de la funcion refCursor para ejecutar el paquete.
declare
tipo_Cursor sys_refcursor := null;
valor_cursor varchar2(100);
begin
tipo_Cursor :=
prueba_ref_cursor();--Open
cursor
LOOP --Inicia el llop
FETCH tipo_Cursor INTO valor_cursor; --Pasa los valores a valor_cursor
EXIT WHEN tipo_Cursor%NOTFOUND; --Indica la salida del loop
DBMS_OUTPUT.PUT_LINE(valor_cursor); --Imprime el valor
END LOOP; --Fin
del loop
close tipo_Cursor; --Se
cierra el cursor
end;
Output: