문서유형ㅣ장애해결
분야ㅣApp개발
적용제품버전ㅣ6FS07
오류코ㅣ15046, 15146
문서번호ㅣTDETS018
현상
UTL_RAW.CONVERT 기능 사용 시 아래 예시코드와 같이 TBR-15146 오류 발생하였습니다.
DECLARE rawvar RAW(100); to_charset VARCHAR(100); from_charset VARCHAR2(100); literal VARCHAR2(100); BEGIN literal := 'A'; to_charset := 'US7ASCII'; from_charset := 'UTF8'; rawvar := utl_raw.convert(UTL_RAW.CAST_TO_RAW(literal), to_charset, from_charset); dbms_output.put_line(rawvar); END; / TBR-15146: PSM compilation error. TBR-15046: Identifier is out of scope. at line 10, column 11 of null: rawvar := utl_raw.convert(UTL_RAW.CAST_TO_RAW(literal), to_charset, from_charset
원인
UTL_RAW.CONVERT 기능이 구현된 패치가 존재하지 않아 TBR-15146 오류가 발생하였습니다.
해결
UTL_RAW.CONVERT 함수 사용 쿼리 수행 불가할 시, 232649 패치 포함 바이너리인지 확인이 필요합니다.
확인 후, FS07_CS_232649a 패치를 적용해 해결합니다.
주의티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
참고
utl_raw.convert 함수는 raw타입 데이터를 다른 charset의 raw타입 데이터로 변경하므로, 아래 순서를 적용하여 우회 가능합니다.
변환하려는 raw 타입 데이터를 utl_raw.cast_to_varchar2 를 이용해 varchar타입으로 변경합니다. 변환된 varchar타입 데이터를 CONVERT 함수의 인자로 하여 다른 charset으로 변경합니다. 변환된 varchar타입 데이터를 utl_raw.cast_to_raw 함수를 통해 raw타입으로 변경합니다.declare str_utf varchar2(100); str_euc varchar2(100); r_utf raw(100); r_euc raw(100); begin str_utf := convert ('테스트str', 'UTF8', 'EUCKR'); r_utf := utl_raw.cast_to_raw(str_utf); -- r_utf은 UTF8 charset의 raw데이터 str_utf := utl_raw.cast_to_varchar2(r_utf); str_euc := convert(str_utf, 'EUCKR', 'UTF8'); dbms_output.put_line(str_euc); -- 정상 출력 r_euc := utl_raw.cast_to_raw(str_euc); -- r_euc는 EUCKR chatset의 raw데이터 end; /