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