sql >> Database >  >> RDS >> Oracle

Hoe gebruik je record om een ​​ref-cursor te herhalen?

U kunt geen recordtype definiëren op basis van een zwak getypte REF-CURSOR. Aangezien het cursortype dat in het pakket is gedefinieerd, kan worden gebruikt om gegevens van een willekeurige query met willekeurige kolommen te retourneren, kan de PL/SQL-compiler geen geschikt recordtype bepalen om de gegevens in op te halen.

Als u de feitelijke gegevens weet die door de functie worden geretourneerd, kunt u een record van dat type declareren om de gegevens in op te halen. Als ik bijvoorbeeld een functie declareer die een zwak getypt cursortype retourneert, maar ik weet dat de cursor echt een cursor retourneert op basis van de EMP tabel, kan ik de gegevens ophalen in een EMP%ROWTYPE record (merk op dat SYS_REFCURSOR is een door het systeem gedefinieerd zwak getypt REF CURSOR-type)

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;



  1. Een database maken in SQL Server

  2. Problemen met het maken van PostgreSQL-triggers

  3. Tabelstructuur ophalen met dynamische SQL

  4. Definieer een recordtype in PL/SQL-blok dat verwijst naar een verzameling van zichzelf