2012-05-02 15 views
5

मैं एक Oracle मेज और एक स्तंभ (col1) टाइप varchar2(12 byte) है की है। यह एक पंक्ति है और जब मैं कहता हूँक्या मैं ओरेकल में वर्कर 2 के लिए एक संख्या पास कर सकता हूं?

select * from table where col1 = 1234 

ओरेकल कहते अमान्य संख्या col1 का मूल्य 1234

है। ऐसा क्यों है? varchar2 होने पर मैं एक संख्या क्यों नहीं पारित कर सकता हूं?

संपादित करें: सभी प्रतिक्रियाओं महान हैं। धन्यवाद। लेकिन मुझे समझ में नहीं आता है कि 1234 क्यों नहीं लेता है जब 1234 एक वैध वर्चर 2 डेटाटाइप है।

उत्तर

5

समस्या आप उम्मीद करते हैं कि कि Oracle परोक्ष एक चरित्र प्रकार के 1234 कलाकारों जाएगा। इसके विपरीत, ओरेकल स्पष्ट रूप से स्तंभ को एक संख्या में कास्टिंग कर रहा है। कॉलम में एक गैर-संख्यात्मक मान है, इसलिए ओरेकल एक त्रुटि फेंकता है। Oracle documentation स्पष्ट बताता है कि यह कैसे हल किया जाएगा इससे पहले कि यह स्पष्ट रूप से सामने आता है। नियम जो आप देख रहे व्यवहार को समझाता है:

एक संख्यात्मक मान के साथ वर्ण मान की तुलना करते समय, ओरेकल वर्ण डेटा को संख्यात्मक मान में परिवर्तित करता है।

+0

देखेंगे धन्यवाद। तो चरित्र 1234 है, जो ऑरैकल एक संख्या में अंतर्निहित रूप से परिवर्तित हो रहा है। तो 1234 के बाद से त्रुटि वैध संख्या क्यों है? – Victor

+0

तालिका में कुछ संख्या नहीं है। ओरेकल 1234 संख्या के रूप में छोड़ देता है। यह मिलान करने के लिए कॉलम में मान को बदलने की कोशिश कर रहा है। जब यह एक ऐसा मान पाता है जो संख्या नहीं है, तो यह त्रुटि फेंकता है। – JAQFrost

4

ओह, यह बहुत संख्या के बजाय चार कन्वर्ट करने के लिए बेहतर है:

select * 
from table 
where col1 = to_char(1234) 

col1 एक नंबर, to_number एक त्रुटि देता है, क्वेरी को रोकने की तरह नहीं दिखता है।

3

ओरेकल अमान्य संख्या कहता है। ऐसा क्यों है? जब मैं वर्कर 2 होता हूं तो मैं एक संख्या क्यों नहीं पारित कर सकता हूं?

ओरेकल जब से तुम एक नंबर के रूप में यह तुलना कर रहे हैं, संख्या के लिए col1 के चरित्र प्रकार से एक अंतर्निहित रूपांतरण करता है।

इसके अलावा, आप मानते हैं कि 1234केवल पंक्ति है जो प्राप्त किया जा रहा है। हकीकत में, ओरेकल को टेबल से सभी पंक्तियां प्राप्त करनी होती हैं, और फिर where खंड के अनुसार फ़िल्टर करें। अब col1 में एक चरित्र मूल्य है कि इससे पहले कि यह अपने 1234 पंक्ति & कि, जिसके कारण त्रुटि के बाद से चरित्र किसी संख्या में बदला नहीं जा सकता है का सामना करना पड़ता दिलवाया जा रहा है नहीं है।

This fiddle व्यवहार को दर्शाता है। चूंकि abc एक नंबर में परिवर्तित हो canot, आपको लगता है कि त्रुटि संदेश


अब अगर केवल तालिका में रिकॉर्ड है कि एक संख्यात्मक कैरेक्टर युक्त col1 की, तो आप उस statement will work fine

+0

धन्यवाद। बहुत अच्छी व्याख्या – Victor

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

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