Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle中的字符集不匹配错误_Oracle - Fatal编程技术网

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

如果你犯了这个错误,你应该看看两个条件

  • 所有表的所有列名或别名必须相同
  • 所有列必须为同一类型TableA(列NVARCHAR2)、TableB(列 NVARCHAR2)

  • 因为配色机不是可混合的,所以请尝试使用union all而不是union。是否有任何列具有nvarchar或nchar数据类型?是,“ABCD”列的数据类型为nvarchar。我尝试使用UNION ALL,但它给了我相同的错误。它不是文字ABCD,而是一列(id projid或名称等),请参阅我的答案以了解详细信息。在这种情况下,您不需要也不应该使用UNION。使用“联合所有”