2011-11-28 19 views
9

क्या ओरेकल पैकेज परिभाषा के अंदर उपयोगकर्ता परिभाषित प्रकार होना संभव है? जब मैंओरेकल उपयोगकर्ता परिभाषित प्रकार पैकेज परिभाषा

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; 
/
CREATE OR REPLACE PACKAGE BODY AF_CONTRACT AS -- body 

-- PROCEDURE my_procedure (emp_id NUMBER) IS 
-- BEGIN 
--  
-- END my_procedure; 

END AF_CONTRACT; 

निम्नलिखित कोशिश मैं हमेशा एक त्रुटि

Error: PLS-00540: object not supported in this context. 
प्रकार परिभाषा में

मिलता है।

उत्तर

3

ऑब्जेक्ट प्रकारों को डेटाबेस स्तर पर घोषित किया जाना है। आप संकुल विनिर्देश में संग्रह प्रकार घोषित कर सकते हैं।

की संभावित डुप्लिकेट: Possible to create Oracle Database object types inside of PL/SQL?

14

नहीं, यह अनुमति नहीं दी जाती:

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> 

आप एक प्रकार है जो सिर्फ PL/SQL प्रक्रियाओं के बीच डेटा गुजर रहा है तो PL/SQL का उपयोग बनाना चाहते हैं RECORD वाक्य रचना:

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 प्रकार के रूप में बनाना होगा। एसक्यूएल और पीएल/एसक्यूएल दो अलग इंजनों का उपयोग करते हैं, और केवल एसक्यूएल प्रकार एसक्यूएल इंजन के लिए दृश्यमान होते हैं।


एसक्यूएल प्रकार की आवश्यकता के बारे में मेरी सलाह अब ओरेकल के बाद के संस्करणों के लिए सच नहीं है। निश्चित रूप से 11 जीआर 2 और 12 सी में एसक्यूएल इंजन पीएल/एसक्यूएल पैकेज में एसक्यूएल का समर्थन करेगा जो TABLE() खंड में पीएल/एसक्यूएल टेबल का उपयोग करता है। प्रकार पैकेज पैकेज में घोषित किया जाना चाहिए, इसलिए सार्वजनिक और एसक्यूएल इंजन के लिए दृश्यमान। कवर के तहत ओरेकल प्रत्येक घोषणा के लिए एसक्यूएल प्रकार उत्पन्न करता है। आप इन प्रकारों को खोज सकते हैं क्योंकि उनके नाम SYS_PLSQL_ संख्यात्मक पहचानकर्ताओं के बाद शुरू होते हैं।

संबंधित मुद्दे