sql >> Databasteknik >  >> RDS >> Oracle

Hur använder man record för att loopa en ref-markör?

Du kan inte definiera en posttyp baserat på en svagt skriven REF CURSOR. Eftersom markörtypen som definieras i paketet kan användas för att returnera data från en godtycklig fråga med godtyckliga kolumner, kan PL/SQL-kompilatorn inte bestämma en lämplig posttyp att hämta data till.

Om du känner till de faktiska data som returneras från funktionen kan du deklarera en post av den typen för att hämta data till. Till exempel, om jag deklarerar en funktion som returnerar en svagt skriven markörtyp men jag vet att markören verkligen returnerar en markör baserat på EMP tabell kan jag hämta data till en EMP%ROWTYPE post (observera att SYS_REFCURSOR är en systemdefinierad REF CURSOR-typ med svagt typ)

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. SQLite CROSS JOIN med ett praktiskt exempel

  2. Hur stoppar/dödar man en fråga i postgresql?

  3. SQL Server:Hur använder man UNION med två frågor som BÅDA har en WHERE-klausul?

  4. Guide till designdatabas för kalenderhändelse och påminnelse i MySQL