मैं एक तालिका में एक स्तंभ जोड़ने की कोशिश कर रहा था लेकिन DEFAULT खंड के साथ एक आश्चर्यजनक प्रभाव मिला। मौजूदा पंक्तियों के साथ एक तालिका में, मैं बहुत की तरह एक नया स्तंभ कहा:क्या वेरिएन्टिक्स वाले कॉलम के लिए ओरेकल में समर्थित डिफ़ॉल्ट मान हैं?
alter table t add c char(1 char) default 'N' not null;
जब मैं बाद में मेज पर एक चेक बाधा कहा, यह विफल रहा है:
alter table t add constraint chk check(c in ('N', 'Y'));
कौन सा
ERROR at line 1:
ORA-02293: cannot validate (T.CHK) - check constraint violated.
में हुई
अन्य जानकारी:
- क्योंकि मैं इकाइयों को स्पष्ट रूप से सेट कर रहा हूं (यानी, चार (1) के विपरीत चार (1)), मैं nls_length_semanatics के मान को प्रासंगिक होने की अपेक्षा नहीं करता हूं।
- कॉलम को चार (1 char) के रूप में जोड़ने के बाद, नए जोड़े गए "एन" वास्तव में "एन" हैं और मुझे यकीन नहीं है कि अतिरिक्त व्हाइटस्पेस क्या है।
- कॉलम को चार (1 बाइट) के रूप में जोड़ना अपेक्षित काम करता है;
- कॉलम को "डिफ़ॉल्ट" एन 'नल "के बिना जोड़ना, इसके बाद सभी मौजूदा पंक्तियों को' एन 'में अपडेट करके, कॉलम को' नल 'में बदलने के बाद भी उम्मीद के अनुसार काम करता है।
- NLS_CHARACTERSET AL32UTF8 है, लेकिन मुझे अपेक्षा नहीं है कि यह प्रासंगिक भी हो।
- डाटाबेस ओरेकल 11 जी है; 11.2.0.1.0।
धन्यवाद।
अद्यतन करने के लिए एक
UPDATE
जारी कर सकता है , इसे क्यों नहीं (1 बाइट)? – tboneअपनी जांच बाधा को 'चेक (सीएन (TO_NCHAR (' एन '), TO_NCHAR (' वाई ') के रूप में पुनः लिखने का प्रयास करें))। मुझे यकीन नहीं है कि चेक बाधाओं में फ़ंक्शन आमंत्रण की अनुमति है, लेकिन कम से कम एक शॉट के लायक हो सकता है। –