एक रिकॉर्ड डेटाटाइप एक पीएल/एसक्यूएल डेटाटाइप है। एसक्यूएल इसके बारे में नहीं जानता है। शायद इसीलिए आपको त्रुटि मिल रही है। यह उदाहरण देखें:
SQL> create package mypkg
2 as
3 type myrec is record
4 ( id int
5 , name varchar2(10)
6 );
7 function f return myrec;
8 end mypkg;
9 /
Package created.
SQL> create package body mypkg
2 as
3 function f return myrec
4 is
5 r myrec;
6 begin
7 r.id := 1;
8 r.name := 'test';
9 return r;
10 end f;
11 end mypkg;
12 /
Package body created.
SQL> desc mypkg
FUNCTION F RETURNS RECORD
ID NUMBER(38) OUT
NAME VARCHAR2(10) OUT
SQL> select mypkg.f from dual
2 /
select mypkg.f from dual
*
ERROR at line 1:
ORA-00902: invalid datatype
एसक्यूएल में त्रुटि जिसका मैं जिक्र कर रहा था। हालांकि आप इसे पीएल/एसक्यूएल से कॉल कर सकते हैं:
SQL> declare
2 r mypkg.myrec;
3 begin
4 r := mypkg.f;
5 dbms_output.put_line(r.id);
6 dbms_output.put_line(r.name);
7 end;
8 /
1
test
PL/SQL procedure successfully completed.
यदि आप SQL में फ़ंक्शन का उपयोग करना चाहते हैं, तो आप SQL ऑब्जेक्ट टाइप बना सकते हैं। ध्यान दें कि ऐसा करने के लिए एसक्यूएल का उपयोग करने पर जोर देने से आपके फ़ंक्शन को सीधे सी # से कॉल करना अधिक बेहतर लगता है। लेकिन सिर्फ रिकॉर्ड के लिए:
SQL> drop package mypkg
2 /
Package dropped.
SQL> create type myobj is object
2 ( id int
3 , name varchar2(10)
4 );
5 /
Type created.
SQL> create package mypkg
2 as
3 function f return myobj;
4 end mypkg;
5 /
Package created.
SQL> create package body mypkg
2 as
3 function f return myobj
4 is
5 begin
6 return myobj(1,'test');
7 end f;
8 end mypkg;
9 /
Package body created.
SQL> select mypkg.f from dual
2 /
F(ID, NAME)
--------------------------------------------------------------
MYOBJ(1, 'test')
1 row selected.
सादर, रोब।