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

फिक्स एरर "ORA-01790:एक्सप्रेशन में संबंधित एक्सप्रेशन के समान डेटाटाइप होना चाहिए"

यदि आपको Oracle डेटाबेस में "ORA-01790:एक्सप्रेशन में संबंधित एक्सप्रेशन के समान डेटाटाइप होना चाहिए" त्रुटि मिल रही है, तो यह शायद इसलिए है क्योंकि आप UNION जैसे ऑपरेटर का उपयोग कर रहे हैं , INTERSECT , या EXCEPT एक मिश्रित क्वेरी चलाने के लिए, लेकिन प्रत्येक क्वेरी द्वारा लौटाए गए कॉलम अलग-अलग डेटा प्रकार समूहों का उपयोग करते हैं।

इस समस्या को ठीक करने के लिए, आपको यह सुनिश्चित करना होगा कि दूसरी क्वेरी द्वारा लौटाया गया प्रत्येक कॉलम उसी डेटा प्रकार समूह का उपयोग करता है जो पहली क्वेरी में संबंधित कॉलम का है।

त्रुटि का उदाहरण

यहां कोड का एक उदाहरण दिया गया है जो इस त्रुटि को उत्पन्न करता है:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId FROM Students;

परिणाम:

ORA-01790: expression must have same datatype as corresponding expression

यहाँ समस्या यह है कि मैं TeacherName . को संयोजित करने का प्रयास कर रहा हूँ StudentId . के साथ पहली क्वेरी में कॉलम दूसरी क्वेरी में कॉलम।

मेरे मामले में, TeacherName कॉलम एक varchar(50) है कॉलम लेकिन StudentId कॉलम एक int है कॉलम। इससे त्रुटि उत्पन्न होती है।

समाधान 1

उपरोक्त त्रुटि का पहला (और शायद सबसे आम) समाधान यह सुनिश्चित करना है कि हमारे पास प्रत्येक क्वेरी में सही कॉलम है।

मेरे मामले में, यह बिल्कुल स्पष्ट लगता है कि मैंने गलत कॉलम पास किए हैं। इसलिए, मैं उपरोक्त क्वेरी को निम्नानुसार संशोधित कर सकता हूं:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

परिणाम:

TEACHERNAME
बेन
बिल
कैथी
इन
फेय
जेट
स्पाइक
वॉरेन

या मैं निम्न कार्य कर सकता था:

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

परिणाम:

TEACHERID TEACHERNAME
1 फेय
1 वॉरेन
2 बेन
2 जेट
3 कैथी
3 स्पाइक
4 कैथी
4 ऐन
5 बिल
5 वॉरेन
6 बिल

दोनों ही मामलों में, दूसरी क्वेरी द्वारा लौटाए गए कॉलम प्रकार पहली क्वेरी द्वारा दिए गए प्रकार से मेल खाते हैं।

समाधान 2

कुछ मामलों में, आप पा सकते हैं कि आपके पास सही कॉलम हैं, लेकिन उनके प्रकार मेल नहीं खाते। ऐसे मामलों में, आपको किसी एक कॉलम को किसी भिन्न डेटा प्रकार में बदलने की आवश्यकता हो सकती है।

हमारे उदाहरण का उपयोग करके, हम यह कर सकते हैं:

SELECT TeacherName FROM Teachers
UNION
SELECT TO_CHAR(StudentId) FROM Students;

परिणाम:

TEACHERNAME
1
2
3
4
5
6
बेन
बिल
कैथी
वॉरेन

यह शायद सबसे अच्छा उदाहरण नहीं है, क्योंकि यह आईडी के साथ नामों का संयोजन कर रहा है, लेकिन मुझे यकीन है कि आपको तस्वीर मिल जाएगी। हम TO_CHAR(number) . का उपयोग करके त्रुटि से बचने में सक्षम थे StudentId . को कन्वर्ट करने के लिए फंक्शन एक char . के लिए कॉलम टाइप करें।


  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. Oracle संग्रहीत कार्यविधि में AS और IS में क्या अंतर है?

  4. Oracle में कुछटेबल से COUNT(*) चुनने के लिए तेज़ विकल्प

  5. घंटे या दिन के हिसाब से रिकॉर्ड को समूहबद्ध करना और शून्य या शून्य के साथ अंतराल भरना