Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como usar o registro para fazer um loop de um cursor de referência?


Você não pode definir um tipo de registro com base em um REF CURSOR de tipo fraco. Como o tipo de cursor definido no pacote pode ser usado para retornar dados de uma consulta arbitrária com colunas arbitrárias, o compilador PL/SQL não pode determinar um tipo de registro apropriado para buscar os dados.

Se você souber os dados reais que estão sendo retornados da função, poderá declarar um registro desse tipo para buscar os dados. Por exemplo, se eu declarar uma função que retorna um tipo de cursor de tipo fraco, mas eu sei que o cursor realmente retorna um cursor baseado no EMP tabela, posso buscar os dados em um EMP%ROWTYPE registro (observe que SYS_REFCURSOR é um tipo REF CURSOR de tipo fraco definido pelo 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;