संभव डुप्लिकेट:
Why does Oracle 9i treat an empty string as NULL?बनाम Oracle में रिक्त स्ट्रिंग अशक्त
मैं Oracle 10g में एक तालिका केवल दो कॉलम के साथ TEMP_TABLE
नामित - बस प्रदर्शन की खातिर id
और description
।
स्तंभ id
एक दृश्य उत्पन्न प्रकार NUMBER(35, 0) not null
और स्तंभ DESCRIPTION
की प्राथमिक कुंजी है VARCHAR2(4000) not null
का एक प्रकार है।
इस मामले में मूल तालिका संरचना निम्न की तरह कुछ दिखाई देगी।
+--------------+-----------+---------------+
|Name | Null? | Type |
+--------------+-----------+---------------+
|ID | NOT NULL | NUMBER(35) |
|DESCRIPTION | NOT NULL | VARCHAR2(4000)|
+--------------+-----------+---------------+
इस तालिका बनाने के बाद, मैं वैकल्पिक रूप से निम्नलिखित INSERT
आदेशों सम्मिलित करने का प्रयास कर रहा हूँ।
INSERT INTO temp_table (id, description) VALUES (1, null); ->unsuccessful
INSERT INTO temp_table (id, description) VALUES (2, ''); ->unsuccessful
उन दोनों स्पष्ट रूप असफल क्योंकि not null
बाधा DESCRIPTION
स्तंभ पर लागू की जाती है कर रहे हैं।
दोनों मामलों में, ओरेकल की शिकायत
ORA-01400: cannot insert NULL into ("WAGAFASHIONDB"."TEMP_TABLE"."DESCRIPTION")
रिक्त स्ट्रिंग Oracle में एक NULL
मूल्य माना जाता है।
अगर मैं DESCRIPTION
स्तंभ पर not null
बाधा गिरा तो बुनियादी तालिका संरचना निम्नलिखित
+--------------+-----------+---------------+
|Name | Null? | Type |
+--------------+-----------+---------------+
|ID | NOT NULL | NUMBER(35) |
|DESCRIPTION | | VARCHAR2(4000)|
+--------------+-----------+---------------+
और INSERT
आदेशों के रूप में सफल होगा निर्दिष्ट के दोनों प्रकार दिखाई देगा। वे के DESCRIPTION
कॉलम में एक null
मान के साथ दो पंक्तियां बनाते हैं और दूसरा खाली स्ट्रिंग ''
के साथ।
अब, अगर मैं निम्नलिखित SELECT
आदेश जारी,
SELECT * FROM temp_table WHERE description IS NULL;
तो यह हासिल करेगा दोनों पंक्तियों जिसमें एक एक null
महत्व है और अन्य DESCRIPTION
स्तंभ में कोई रिक्त स्ट्रिंग ''
है।
निम्नलिखित SELECT
बयान तथापि TEMP_TABLE
SELECT * FROM temp_table WHERE description='';
से कोई भी पंक्ति को पुन: प्राप्त यह भी पंक्ति जो DESCRIPTION
स्तंभ में कोई रिक्त स्ट्रिंग है पुनः प्राप्त नहीं करता है।
मुमकिन है, ऐसा लगता है कि ओरेकल एक null
मूल्य और एक खाली स्ट्रिंग ''
अलग ढंग से यहाँ जो तथापि INSERT
बयान है जिसमें दोनों एक null
मूल्य और एक खाली स्ट्रिंग ''
हैं के साथ मामला हो प्रतीत नहीं होता है व्यवहार करता है not null
बाधा वाले कॉलम में डालने से रोका गया। ऐसा क्यों है?
आप कैसे देखते हैं कि वर्णन फ़ील्ड में से एक में एक खाली स्ट्रिंग है और दूसरे में शून्य है? –
@ फ्लैन्श- संभवतः, मैंने उन 'INSERT' कथनों के साथ माना, क्योंकि मुझे नहीं पता था कि खाली तार '' 'को' शून्य 'मानों में परिवर्तित कर दिया गया है, क्षमा करें। – Tiny
आप [* यह *] (http://stackoverflow.com/a/203536/1057429) – alfasin