programing

Oracle에서 문자 집합 불일치 오류

muds 2023. 7. 25. 21:24
반응형

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 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.

두 select 문을 개별적으로 실행하면 적절한 출력이 나오지만 두 select를 결합하면 문자 집합 불일치 오류가 발생합니다.

여기서 뭐가 잘못됐어요?

당신이 확인했듯이 NVARchar'd ..nvarchar를 기소할 것입니다.

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_charit:

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
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에서 암시적으로 캐스트할 수 없는 문자 데이터 유형의 필드가 있으므로 직접 캐스트하면 됩니다. 하지만 캐스트로 인한 문자 손실을 방지할 수 있습니다.

이 오류가 발생하면 두 가지 조건을 살펴봐야 합니다.

  1. 모든 열 이름 또는 별칭은 모든 테이블에 대해 동일해야 합니다.
  2. 모든 열은 동일한 유형의 표 A(NVARCHAR2 열), 표 B(NVARCHAR2 열)이어야 합니다.

언급URL : https://stackoverflow.com/questions/13354436/character-set-mismatch-error-in-oracle

반응형