Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak napisać procedurę składowaną, która dodaje kolumnę do kursora ref z innej procedury składowanej?

Jednym z możliwych rozwiązań (które w końcu można uprościć) jest użycie funkcji tabeli do przetwarzania kursora i dodania wartości funkcji.

Załóżmy, że funkcja zwracająca sys_refcursor nazywa się get_cur i że kursor składa się z kolumny ID, NAME (jest to ważne, ponieważ funkcja tabeli wymaga definicji typu).

Deklarujesz TYP dla wiersza (włącznie z dodatkową kolumną ścieżki) oraz dla wynikowej tabeli.

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

create type t_rows is table of t_row;
/

i zdefiniuj funkcję tabeli, która pobiera kursor i dodaje wywołanie funkcji.

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

Teraz możesz wybrać dane z funkcji tabeli

select * from  table(get_cur2); 

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

i oczywiście możesz użyć tego zapytania, aby otworzyć kursor w trzeciej funkcji, która zwróci SYS_REFCURSOR z dodatkową kolumną ścieżki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ciekawy problem z Oracle UNION i ORDER BY

  2. Przekaż wartości odczytane z pliku jako dane wejściowe do zapytania SQL w Oracle

  3. Zwróć komunikat z kodem błędu w Oracle Stored Proc

  4. java.sql.SQLException:wyczerpany zestaw wyników

  5. Database API:jak radzić sobie z wieloma warunkami w Pythonie