sql >> Databáze >  >> RDS >> Oracle

Jak zapíšu uloženou proceduru, která přidá sloupec do referenčního kurzoru z jiné uložené procedury?

Jedním z možných řešení (které by se případně dalo zjednodušit) je použití tabulkové funkce pro zpracování kurzoru a přidání hodnoty funkce.

Předpokládejme, že funkce vracející sys_refcursor se nazývá get_cur a že se kurzor skládá ze sloupce ID, NAME (to je důležité, protože tabulková funkce vyžaduje definici typu).

Deklarujete TYPE pro řádek (včetně dalšího sloupce cesty) a pro výslednou tabulku.

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

create type t_rows is table of t_row;
/

a definovat tabulkovou funkci načítání kurzoru a přidání volání funkce.

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;
/

Nyní můžete vybrat data z tabulkové funkce

select * from  table(get_cur2); 

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

a samozřejmě můžete tento dotaz použít k otevření kurzoru ve třetí funkci, která vrátí SYS_REFCURSOR s dodatečným sloupcem cesty.



  1. Co je skenování bitmapové haldy v plánu dotazů?

  2. Read Committed je nutností pro distribuované databáze SQL kompatibilní s Postgres

  3. jak vytvořit tabulku dědičnosti v oracle

  4. Jak vypsat informace o všech souborech Alfresco (Postgres SQL)?