के लिए डिफ़ॉल्ट मान निर्दिष्ट करना मेरे पास ऑब्जेक्ट प्रकार है जिसमें नो-एर्ग कन्स्ट्रक्टर है, लेकिन जब मैं इसे उस प्रकार के कॉलम के लिए डिफ़ॉल्ट मान के रूप में निर्दिष्ट करता हूं, तो मुझे ORA-00904: अवैध पहचानकर्ता त्रुटि मिलती है।ओरेकल: ऑब्जेक्ट टाइप कॉलम
उदाहरण:
CREATE OR REPLACE TYPE test_t AS OBJECT ( val NUMBER(10), CONSTRUCTOR FUNCTION test_t return self as result ) CREATE OR REPLACE TYPE BODY test_t AS CONSTRUCTOR FUNCTION test_t RETURN SELF AS RESULT IS BEGIN val := 1; RETURN; END; END; CREATE TABLE test_table ( test_attr test_t DEFAULT new test_t() ) Error: ORA-00904: "INKA"."TEST_T"."TEST_T": invalid identifier
अगर मैं जैसे के साथ डिफ़ॉल्ट की जगह test_t (1), यह काम करता है, लेकिन उस प्रकार के ओओ encapsulation प्रतिमान तोड़ता है, मैं चाहता हूं कि सभी प्रकार के सभी फ़ील्ड एक ही डिफ़ॉल्ट "डिफ़ॉल्ट मान" हों (आशा है कि आप जानते हैं कि मेरा क्या मतलब है :-)
क्या मुझे याद आ रही है यहां कुछ है, या यह सामान्य है और इस तरह के गैर-डिफ़ॉल्ट रचनाकारों का उपयोग करना संभव नहीं है?
ORA-06,553 से मेल खाते हैं: PLS-307 डुप्लीकेट निर्माता परिभाषा का परिणाम है, ओरेकल कि में कुछ हद तक हास्यास्पद है; यदि आप वैल के साथ "in_val" पैरामीटर नाम को प्रतिस्थापित करते हैं (जैसा कि विशेषता का नाम है), यह डिफ़ॉल्ट कन्स्ट्रक्टर को सही ढंग से ओवरराइड करेगा। –
ठीक है, लेकिन फिर भी यह इस कन्स्ट्रक्टर को पाता है ... –
मुझे ट्रिगर वर्कअराउंड के बारे में पता है, लेकिन कुछ और अधिक पठनीय और प्रबंधनीय फैशन में संभव होने के लिए कोड की 5-10 लाइनें। प्रारंभ में मैंने माना कि यह संभव नहीं है क्योंकि एसक्यूएल संदर्भ पीएल/एसक्यूएल संदर्भ के अंदर नहीं देखता है, लेकिन यह स्पष्ट रूप से मामला नहीं है क्योंकि तब से ओओ सामान शुद्ध एसक्यूएल में काम नहीं करेगा। तो यह समस्या या तो ओरेकल के हिस्से पर एक निरीक्षण है, या कुछ वाक्यविन्यास है जो मुझे अनजान है ... –