Mostrando entradas con la etiqueta refCursor. Mostrar todas las entradas
Mostrando entradas con la etiqueta refCursor. Mostrar todas las entradas

Cursores Externos (Ref Cursor)



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: