Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle नंबर और varchar शामिल हों

अंतर्निहित रूपांतरण विफल होने का एक कारण यह है कि जब वर्चर कॉलम में शामिल होने वाला डेटा होता है जो संख्यात्मक नहीं होता है। Oracle स्ट्रिंग्स को परिवर्तित करके संख्या को varchar2 जॉइन करता है (गैरी के उद्धरण को उसकी टिप्पणी में देखें), इसलिए यह वास्तव में इसे निष्पादित करता है:

select a.col1, b.somecol 
from tableA a inner join tableB b on to_number(b.col2)=a.col1;

यदि tableB.col2 में वे मान हैं जो संख्यात्मक नहीं हैं - काफी संभावना है, यह एक स्ट्रिंग है - तो यह ORA-01722: invalid number को नुकसान पहुंचाएगा . संख्या कॉलम को एक स्ट्रिंग में स्पष्ट रूप से कास्ट करके आप ओरेकल के डिफ़ॉल्ट व्यवहार को शॉर्ट-सर्किट करते हैं।

तथ्य यह है कि आपको अपने पहले दो वातावरणों में यह समस्या नहीं मिलती है, यह किस्मत की बात है न कि कॉन्फ़िगरेशन की। यह किसी भी समय हड़ताल कर सकता है, क्योंकि क्वेरी को तोड़ने के लिए इसे केवल एक गैर-संख्यात्मक स्ट्रिंग की आवश्यकता होती है। तो वास्तव में आपको सभी वातावरणों में स्पष्ट रूपांतरण के साथ चलना चाहिए।

प्रदर्शन के लिए, आप एक फ़ंक्शन-आधारित अनुक्रमणिका बना सकते हैं ...

create index whatever_idx on tableA ( to_char(col1) )
/ 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. हाइबरनेट दो असंबंधित तालिका में शामिल हों जब दोनों में समग्र प्राथमिक कुंजी हो

  2. इस आसान ट्रिगर का समाधान

  3. SQLPlus पर एक स्क्रिप्ट निष्पादित करते समय, यह आउटपुट के बजाय संख्याओं का एक क्रम प्रिंट करता है

  4. प्रक्रिया में गतिशील अद्यतन क्वेरी

  5. Oracle में स्ट्रिंग एकत्रीकरण:एकल कॉलम में एकाधिक पंक्तियाँ