Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara menulis prosedur tersimpan yang menambahkan kolom ke kursor ref dari prosedur tersimpan lainnya?

Salah satu solusi yang mungkin (yang pada akhirnya dapat disederhanakan) adalah dengan menggunakan fungsi tabel untuk memproses kursor dan menambahkan nilai fungsi.

Asumsikan fungsi yang mengembalikan sys_refcursor disebut get_cur dan kursor terdiri dari kolom ID, NAME (ini penting, karena fungsi tabel memerlukan definisi tipe).

Anda mendeklarasikan TYPE untuk baris (termasuk kolom jalur tambahan) dan untuk tabel yang dihasilkan.

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

create type t_rows is table of t_row;
/

dan tentukan fungsi tabel dengan mengambil kursor dan menambahkan panggilan fungsi.

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

Sekarang Anda dapat memilih data dari fungsi tabel

select * from  table(get_cur2); 

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

dan tentu saja Anda dapat menggunakan kueri ini untuk membuka kursor di fungsi ketiga yang akan mengembalikan SYS_REFCURSOR dengan kolom jalur tambahan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORACLE Query dengan ORDER BY dan UNION

  2. Referensi yang bagus untuk Oracle PL/SQL

  3. Masalah NLS_CHARACTERSET WE8ISO8859P1 dan UTF8 di Oracle

  4. Cara menggunakan pass array dalam fungsi PL/SQL

  5. Ora 12154 kesalahan