Oracle中的字符集不匹配错误
我正在尝试运行以下查询:Oracle中的字符集不匹配错误,oracle,Oracle,我正在尝试运行以下查询: 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
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:字符集不匹配错误。
当我分别运行这两个select语句时,它会给出正确的输出,但当我对两个select进行并集时,它会给出tme字符集不匹配错误
这里有什么问题
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
我刚刚添加了_CHAR函数,这将起作用。显然,Oracle无法隐式转换具有字符数据类型的字段,因此您只需要自己显式转换它,但要小心避免因转换而丢失任何字符。因为您已确认某些内容是NVARchar。.将NVARchar转换为char例如
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
失败,因为“A”是NVARCHAR。因此,要对其进行描述:
SQL> select 1, 'hi' from dual
2 union all
3 select 2, to_char(a) from tab;
1 'HI'
---------- ----
1 hi
2 a
或者将字符串文字“hi”强制转换为Nvarchar
SQL> select 1, n'hi' from dual
2 union all
3 select 2, a from tab;
1 N'
---------- --
1 hi
2 a
如果你犯了这个错误,你应该看看两个条件
因为配色机不是可混合的,所以请尝试使用union all而不是union。是否有任何列具有nvarchar或nchar数据类型?是,“ABCD”列的数据类型为nvarchar。我尝试使用UNION ALL,但它给了我相同的错误。它不是文字ABCD,而是一列(id projid或名称等),请参阅我的答案以了解详细信息。在这种情况下,您不需要也不应该使用UNION。使用“联合所有”