SQL प्रकारों के साथ आप %ROWTYPE नहीं कर सकते, आपको तालिका* से मेल खाने के लिए प्रत्येक कॉलम टाइप करना होगा।
*sys.anydataset एक तरफ। लेकिन उस मार्ग से नीचे जाना बहुत अधिक जटिल कोडिंग है।
जैसे अगर आपकी टेबल
. थीcreate table foo (id number, cola varchar2(1));
तब
create type email_queue_type is object (id number, cola varchar2(1));
/
create type t_email_queue_type as table of email_queue_type;
/
और अपने फ़ंक्शन से आउटपुट के रूप में उस तालिका ईमेल_क्यू_टाइप_टैब का उपयोग करें।
लेकिन मैं एक पाइपलाइन किए गए फ़ंक्शन की अनुशंसा करता हूं, क्योंकि आपका वर्तमान कोड स्केलेबल नहीं है।
उदाहरण:
SQL> create table foo (id number, cola varchar2(1));
Table created.
SQL>
SQL> create type email_queue_type is object (id number, cola varchar2(1));
2 /
Type created.
SQL> create type t_email_queue_type as table of email_queue_type;
2 /
Type created.
SQL> insert into foo select rownum, 'a' from dual connect by level <= 10;
10 rows created.
SQL>
SQL> create or replace PACKAGE email_queue AS
2
3
4 FUNCTION lock_and_get return t_email_queue_type pipelined;
5
6 END email_queue;
7 /
Package created.
SQL> create or replace PACKAGE BODY email_queue AS
2
3 FUNCTION lock_and_get RETURN t_email_queue_type pipelined AS
4 queue_obj t_email_queue_type;
5
6 BEGIN
7
8 for r_row in (select * from foo)
9 loop
10 pipe row(email_queue_type(r_row.id, r_row.cola));
11 end loop;
12
13 END lock_and_get;
14
15 END email_queue;
16 /
Package body created.
SQL> select * from table(email_queue.lock_and_get());
ID C
---------- -
1 a
2 a
3 a
4 a
5 a
6 a
7 a
8 a
9 a
10 a
10 rows selected.
SQL>