sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo usar el registro para hacer un bucle de un cursor de referencia?

No puede definir un tipo de registro basado en un REF CURSOR de tipo débil. Dado que el tipo de cursor definido en el paquete se puede usar para devolver datos de una consulta arbitraria con columnas arbitrarias, el compilador PL/SQL no puede determinar un tipo de registro apropiado para recuperar los datos.

Si conoce los datos reales que devuelve la función, puede declarar un registro de ese tipo para recuperar los datos. Por ejemplo, si declaro una función que devuelve un tipo de cursor de tipo débil pero sé que el cursor realmente devuelve un cursor basado en el EMP tabla, puedo obtener los datos en un EMP%ROWTYPE registro (tenga en cuenta que SYS_REFCURSOR es un tipo REF CURSOR débilmente tipado definido por el sistema)

create or replace function f1
  return sys_refcursor
is
  l_rc sys_refcursor;
begin
  open l_rc
   for select *
         from emp;
  return l_rc;
end;

declare
  l_rc sys_refcursor;
  l_emp emp%rowtype;
begin
  l_rc := f1;
  loop
    fetch l_rc into l_emp;
    exit when l_rc%notfound;
    dbms_output.put_line( l_emp.empno );
  end loop;
end;