2012-11-13 27 views
8

मैं मेरे साथ क्वेरी निम्नलिखित है चलाने के लिए है कि मैं कोशिश कर रहा हूँ:चरित्र बेमेल सेट त्रुटि

SELECT Script from (

SELECT 9 as ColOrder, ' INSERT INTO PROJ VALUES(' || ID || ',''' || Name || ''', ''' || Version || ''', ''ABCD'', sysdate , ''ABCD'', sysdate);' as Script FROM PROJ where Name like '%[Param.1]%' 

union 

SELECT 11 as ColOrder,' INSERT INTO PROJMOD VALUES(' || ID || ', ' || ProjID || ', ' || ModID || ', ' || ObjID || ', ''ABCD'', sysdate, ''ABCD'', sysdate);' as Script FROM PROJMOD where ProjID in (select ID from PROJ where Name like '%[Param.1]%') 

) x 

Order by ColOrder 

लेकिन यह मुझे ORA-12704: character set mismatch error.

देता है जब मैं दोनों के बयान का चयन व्यक्तिगत रूप से चलाने के लिए, यह मुझे देता है उचित आउटपुट लेकिन जब मैं दोनों का चयन कर रहा हूं, तो यह tme चरित्र सेट मिस्चैच त्रुटि देता है।

यहां क्या गलत हो सकता है?

+0

colorder रूप mergable कोशिश नहीं है संघ के बजाय सभी संघ। क्या किसी भी कॉलम में nvarchar या nchar डेटा प्रकार हैं? – DazzaL

+0

हां, 'एबीसीडी' कॉलम NVARCHAR2 का है। मैंने यूनियन ऑल का उपयोग करने की कोशिश की लेकिन यह मुझे एक ही त्रुटि देता है। –

+0

यह शाब्दिक एबीसीडी नहीं होगा लेकिन एक कॉलम (आईडी प्रोजिड या नाम इत्यादि) विवरण के लिए मेरा उत्तर देखें। – DazzaL

उत्तर

1
SELECT Script from (

SELECT 9 as ColOrder, ' INSERT INTO PROJ VALUES(' || to_char(ID) || ',''' || to_char(Name) || ''', ''' || to_char(Version) || ''', ''ABCD'', sysdate , ''ABCD'', sysdate);' as Script FROM PROJ where Name like '%[Param.1]%' 

union 

SELECT 11 as ColOrder,' INSERT INTO PROJMOD VALUES(' || to_char(ID) || ', ' || to_char(ProjID) || ', ' || to_char(ModID) || ', ' || to_char(ObjID) || ', ''ABCD'', sysdate, ''ABCD'', sysdate);' as Script FROM PROJMOD where ProjID in (select ID from PROJ where Name like '%[Param.1]%') 

) x 

Order by ColOrder 

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

+1

आपको इस मामले में संघ की आवश्यकता नहीं है और इसका उपयोग नहीं करना चाहिए। "यूनियन सब" का प्रयोग करें – DazzaL

10

के रूप में पुष्टि करने के बाद कुछ चीजें चार करने के लिए जैसे

SQL> create table tab(a nvarchar2(2)); 

Table created. 

SQL> insert into tab values ('a'); 

1 row created. 

SQL> select 1, 'hi' from dual 
    2 union all 
    3 select 2, a from tab; 
select 1, 'hi' from dual 
      * 
ERROR at line 1: 
ORA-12704: character set mismatch 

विफल रहता है के रूप में 'ए' NVARCHAR है nvarchar ..cast NVARchar'd हैं। तो यह TO_CHAR:

SQL> select 1, 'hi' from dual 
    2 union all 
    3 select 2, to_char(a) from tab; 

     1 'HI' 
---------- ---- 
     1 hi 
     2 a 

या स्ट्रिंग डाली शाब्दिक 'हाय' के लिए एक Nvarchar

SQL> select 1, n'hi' from dual 
     2 union all 
     3 select 2, a from tab; 

      1 N' 
    ---------- -- 
      1 hi 
      2 a 
0

आपको यह त्रुटि ले, तो आप दो शर्तों पर गौर करना चाहिए।

  1. सभी स्तंभ नाम या उपनाम सभी तालिकाओं
  2. सभी स्तंभ एक ही प्रकार TableA (col NVARCHAR2) होना चाहिए के लिए एक ही होना चाहिए, TableB (col NVARCHAR2)
संबंधित मुद्दे