sql >> Databasteknik >  >> RDS >> Oracle

Hur skriver jag en lagrad procedur som lägger till en kolumn till en ref-markör från en annan lagrad procedur?

En möjlig lösning (som så småningom skulle kunna förenklas) är att använda en tabellfunktion för att bearbeta markören och lägga till funktionsvärdet.

Antag att funktionen som returnerar sys_refcursor heter get_cur och att markören består av kolumnen ID, NAME (detta är viktigt, eftersom tabellfunktionen kräver typdefinition).

Du deklarerar TYP för raden (inklusive den extra sökvägskolumnen) och för den resulterande tabellen.

create type t_row is object
 ( id             number(10),
   name varchar2(10),
   path varchar2(10)
);
/

create type t_rows is table of t_row;
/

och definiera tabellfunktionen genom att hämta markören och lägga till funktionsanropet.

create or replace function get_cur2  return 
t_rows
PIPELINED
as
   cv_out     sys_refcursor;
   id   number;
   name   varchar2(100);    
begin
      cv_out := get_cur; 
      loop 
        FETCH cv_out INTO id, name;
        exit when cv_out%NOTFOUND;
        pipe row(t_row(id,name, GetRegionPath(id)));
      end loop;
      close    cv_out;
      return;
end;
/

Nu kan du välja data från tabellfunktionen

select * from  table(get_cur2); 

        ID NAME       PATH     
---------- ---------- ----------
         1 one        path 1     
         2 two        path 2 

och naturligtvis kan du använda den här frågan för att öppna en markör i en tredje funktion som returnerar SYS_REFCURSOR med den extra sökvägskolumnen.



  1. Inkrementell datareplikering i IRI Workbench

  2. Fråga när parametern är ingen django

  3. Hur använder man Mysql-variabler med Hibernate?

  4. rodbc teckenkodningsfel med PostgreSQL