컴퓨터활용/티맥스

DBIO EXECSQL 실행시 "ORA-00932: 일관성 없는 데이터 유형" 발생하는 경우

멜번초이 2008. 5. 19. 14:41
반응형

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

지무길 책임이 소스를 제공했습니다.

반응형