नहीं, इसकी अनुमति नहीं है:
SQL> CREATE OR REPLACE PACKAGE AF_CONTRACT AS -- spec
-- PROCEDURE my_rpcedure (emp_id NUMBER);
TYPE DTO_GRID AS OBJECT
(
ROWKEY NVARCHAR2(200),
COLUMNKEY NVARCHAR2(200),
CELLVALUE NVARCHAR2(200),
OLDVALUE NVARCHAR2(200),
TAG NVARCHAR2(200)
);
END AF_CONTRACT;
/
2 3 4 5 6 7 8 9 10 11 12
Warning: Package created with compilation errors.
SQL> SQL> sho err
Errors for PACKAGE AF_CONTRACT:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/4 PLS-00540: object not supported in this context.
SQL>
यदि आप एक ऐसा प्रकार बनाना चाहते हैं जो पीएल/एसक्यूएल प्रक्रियाओं के बीच डेटा पास कर रहा है तो पीएल/एसक्यूएल रिकॉर्ड सिंटैक्स का उपयोग करें:
SQL> CREATE OR REPLACE PACKAGE AF_CONTRACT AS -- spec
-- PROCEDURE my_rpcedure (emp_id NUMBER);
TYPE DTO_GRID IS RECORD
(
ROWKEY NVARCHAR2(200),
COLUMNKEY NVARCHAR2(200),
CELLVALUE NVARCHAR2(200),
OLDVALUE NVARCHAR2(200),
TAG NVARCHAR2(200)
);
END AF_CONTRACT;
/
2 3 4 5 6 7 8 9 10 11 12
Package created.
SQL>
हालाँकि, यदि आप एक प्रकार चाहते हैं जिसे आप SQL कथन में उपयोग कर सकते हैं - अर्थात, TABLE()
के इनपुट के रूप में फ़ंक्शन - आपको इसे SQL प्रकार के रूप में बनाना होगा। SQL और PL/SQL दो अलग-अलग इंजनों का उपयोग करते हैं, और SQL इंजन को केवल SQL प्रकार दिखाई देते हैं।
SQL प्रकार की आवश्यकता के बारे में मेरी सलाह अब Oracle के बाद के संस्करणों के लिए सही नहीं है। निश्चित रूप से 11gR2 और 12c में SQL इंजन PL/SQL पैकेज में SQL का समर्थन करेगा जो TABLE()
में PL/SQL तालिकाओं का उपयोग करता है। खंड। प्रकारों को पैकेज स्पेक में घोषित किया जाना है, इसलिए सार्वजनिक और SQL इंजन के लिए दृश्यमान। कवर के तहत Oracle प्रत्येक घोषणा के लिए SQL प्रकार उत्पन्न करता है। आप इन प्रकारों को खोज सकते हैं क्योंकि उनके नाम SYS_PLSQL_
start से शुरू होते हैं इसके बाद संख्यात्मक पहचानकर्ता हैं।