DBIO EXECSQL 실행시 "ORA-00932: 일관성 없는 데이터 유형" 발생하는 경우
INSERT INTO TB_NB_NL_HH_VIP ( NSGRN_LMT_AM )
SELECT (CASE WHEN :chk_yn = '0' THEN NSGRN_LMT_AM ELSE :nsgrn_lmt_am END)
FROM TB_NB_NL_HH_VIP
위와 같은 경우 컴파일을 정상적으로 수행되나 실행할 때 다음과 같은 오류가 발생합니다.
ORA-00932: 일관성 없는 데이터 유형
이것은 프로프레임 내부적으로 PfmNumber 타입의 변수를 SQL 속에 대입할 때 char 문자열로 값을 전달하기 때문에 발생되는 문제 입니다. 따라서 위와 같은 execSQL 속의 입력변수의 타입을 맞추기 위하여 다음과 같이 고쳐서 사용해야 합니다.
INSERT INTO TB_NB_NL_HH_VIP ( NSGRN_LMT_AM )
SELECT (CASE WHEN :chk_yn = '0' THEN NSGRN_LMT_AM ELSE TO_NUMBER(:nsgrn_lmt_am) END)
FROM TB_NB_NL_HH_VIP
비슷한 케이스로서 union을 사용할 때도 오류가 발생되는데 원인은 동일한 데서 기인된다.
union 문에서 테이블 변수와 입력변수를 동시에 사용하는 경우
실제사례2) SELECT NSGRN_LMT_AM FROM TB_NB_...
UNION ALL
SELECT :nsgrn_lmt_am FROM TB_NB_...
에러내용 => ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다
위 두가지 상황과는 별개로 decode 조건문에서 테이블변수를 먼저 사용하고, 뒤이어 입력변수를 사용하는 경우 오라클이 to_number 또는 to_char 알아서 하기 때문에 오류는 나지 않는다.
실제사례3) SELECT decode(:chk_yn, 0, NSGRN_LMT_AM, :nsgrn_lmt_am) FROM TB_NB_...
지무길 책임이 소스를 제공했습니다.