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

Kembalikan koleksi dari fungsi yang dikemas untuk digunakan di pilih

Anda bisa menggunakan objek SQL di dalam paket Anda atau menggunakan fungsi pipelined (diuji dengan 10gr2). Menggunakan objek SQL sangatlah mudah, fungsi Anda yang sebenarnya dapat digunakan sebagaimana adanya di dalam sebuah paket.

Berikut cara menggunakan fungsi pipelined dengan tipe RECORD:

SQL> CREATE OR REPLACE PACKAGE my_pkg IS
  2     TYPE t_col IS RECORD(
  3        i NUMBER,
  4        n VARCHAR2(30));
  5     TYPE t_nested_table IS TABLE OF t_col;
  6     FUNCTION return_table RETURN t_nested_table PIPELINED;
  7  END my_pkg;
  8  /

Package created
SQL> CREATE OR REPLACE PACKAGE BODY my_pkg IS
  2     FUNCTION return_table RETURN t_nested_table PIPELINED IS
  3        l_row t_col;
  4     BEGIN
  5        l_row.i := 1;
  6        l_row.n := 'one';
  7        PIPE ROW(l_row);
  8        l_row.i := 2;
  9        l_row.n := 'two';
 10        PIPE ROW(l_row);
 11        RETURN;
 12     END;
 13  END my_pkg;
 14  /

Package body created

SQL> select * from table(my_pkg.return_table);

         I N
---------- ------------------------------
         1 one
         2 two

Apa yang terjadi di belakang layar adalah bahwa Oracle memahami bahwa karena Anda ingin menggunakan fungsi Anda dalam kueri (karena kata kunci PIPELINED), Anda akan memerlukan objek SQL, sehingga objek tersebut dibuat di belakang layar untuk Anda:

SQL> select object_name
  2    from user_objects o
  3   where o.created > sysdate - 1
  4     and object_type = 'TYPE';

OBJECT_NAME
--------------------------------------------------------------------------------
SYS_PLSQL_798806_24_1
SYS_PLSQL_798806_DUMMY_1
SYS_PLSQL_798806_9_1

SQL> select text from user_source where name='SYS_PLSQL_798806_9_1';

TEXT
--------------------------------------------------------------------------------
type        SYS_PLSQL_798806_9_1 as object (I NUMBER,
N VARCHAR2(30));


  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:Bagaimana cara mengetahui apakah ada transaksi yang tertunda?

  2. Melihat Grup Oracle-oleh Bug

  3. Bagaimana Anda menetapkan hasil ekspresi ke variabel substitusi SQL?

  4. Pengembang SQL 4.1.3 Dirilis

  5. Temukan apakah kolom di Oracle memiliki urutan