12

実行しようとしている次のクエリがあります。

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.

両方の選択ステートメントを個別に実行すると、適切な出力が得られますが、両方の選択を結合すると、文字セットの不一致エラーが発生します。

ここで何が間違っている可能性がありますか?

4

3 に答える 3

13

いくつかのものが NVARchar'd であることを確認したので、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 であるため失敗します。だから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

または、文字列リテラル 'hi' を Nvarchar にキャストします

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

             1 N'
    ---------- --
             1 hi
             2 a
于 2012-11-14T01:30:51.223 に答える
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 関数を追加したところ、うまくいきます。明らかに、Oracle によって暗黙的にキャストできない文字データ型のフィールドがあるため、自分で明示的にキャストする必要がありますが、キャストによる文字の損失を避けるように注意してください。

于 2012-11-13T05:40:22.730 に答える
0

このエラーが発生した場合は、2 つの条件を確認する必要があります。

  1. すべての列名または別名は、すべてのテーブルで同じでなければなりません
  2. すべての列は同じ型である必要があります TableA(col NVARCHAR2)、TableB(col NVARCHAR2)
于 2016-03-26T11:58:24.160 に答える