Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle:रिकॉर्ड डेटाटाइप से चुनें

एक रिकॉर्ड डेटाटाइप एक पीएल/एसक्यूएल डेटाटाइप है। एसक्यूएल इसके बारे में नहीं जानता है। शायद इसीलिए आपको त्रुटि मिल रही है। यह उदाहरण देखें:

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.

सादर, रोब।



  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 में TRUNC (संख्या) फ़ंक्शन

  2. ORA-00907:दायां कोष्ठक गुम है

  3. Oracle संग्रहीत कार्यविधियों के भीतर पाठ की खोज करना

  4. फ़ाइलों में CLOB फ़ील्ड डंप करना?

  5. ट्रिगर के अंदर अपवाद कैसे बढ़ाएं? क्या इसे करने का कोई तरीका है?