2012-03-09 8 views
9

मैं निम्नलिखित कोड का उपयोग कर type परिभाषित करने की कोशिश कर रहा हूं।मैं ओरेकल प्रकार कैसे बना सकता हूं जो डेटा प्रकार के लिए तालिका कॉलम को संदर्भित करता है?

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT (
    app_id  some_table_name.app_id%type 
); 

यदि मैं इसे चलाता हूं, तो मुझे त्रुटि मिलती है।

Error(4,32): PLS-00201: identifier 'some_table_name.app_id' must be declared 

इसमें क्या गलत है?

+1

इस [ओरेकल मंच] पर अधिक जानकारी (https://forums.oracle.com/forums/thread.jspa?threadID=2269924)। मुझे लगता है कि मुझे लगता है कि ऐसा लगता है कि ऐसा कुछ ऐसा लगता है जो मैं सहज अभ्यास के लिए करना चाहता था। – wmorrison365

उत्तर

19

इसके साथ क्या गलत है यह है कि %type पीएल/एसक्यूएल सिंटैक्स है। यह एसक्यूएल में समर्थित नहीं है।

मैं मानता हूं कि यह शर्म की बात है, और अगर हम टेबल कॉलम को इस प्रकार की घोषणाओं में संदर्भित कर सकते हैं तो यह वास्तव में साफ होगा। दुर्भाग्यवश ओरेकल ने पिछले कुछ संस्करणों में अपने TYPE कार्यान्वयन में बदलावों को वास्तव में धीमा कर दिया है, इसलिए मुझे लगता है कि यह निकट भविष्य में बदल जाएगा। इंटरफेस के लिए

CREATE OR REPLACE TYPE MY_TYPE AS OBJECT 
     ( one_row  some_table_name.%rowtype); 

गतिशील वस्तुओं: कि कैसे शांत होगा

क्या मैं वास्तव में देखना पसंद ओरेकल इस वाक्य का समर्थन कर रहा है होगा

?

+0

'% टाइप' पीएल/एसक्यूएल सिंटैक्स है - यह महत्वपूर्ण बात थी जिसे मैंने याद किया था। धन्यवाद। – AppleGrew

+1

+1, यह एक शर्म की बात है और इस तरह के 'प्रकार' के लिए कोडिंग को अधिक लचीला बना देगा। उत्तर के लिए – Ollie

+0

+2, -1 "ठंडा" के लिए :-)। – Ben

4

आप some_table_name.app_id%type उपयोग नहीं कर सकते जब डेटाबेस में एक प्रकार की घोषणा, किसी भी अधिक की तुलना में आप यह कर सकते हैं:

create table emp (empno number, 
        deptno dept.deptnp%type, -- NOT ALLOWED 
       ); 

आप का उपयोग करना चाहिए या तो एक में निर्मित इस तरह के नंबर, VARCHAR2 (10) के रूप में प्रकार या एक उपयोगकर्ता परिभाषित प्रकार जैसे mytype

+0

आपके उत्तर के लिए धन्यवाद। – AppleGrew

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