ORA-01722: 수치가 부적합합니다 에러가 납니다. ㅠㅠ 0 4 80,666

by 오병운 [Oracle 에러코드] [2008.11.07 08:45:35]


안녕하세요

초급개발자 입니다. 다름이 아니라,.. 프로그램을 짜고있는데요

where 절 에 아래와 같이 조건을 줬습니다.

FROM ZAC.ZAC200M00 A , ZAC.ZAC100M00 B
WHERE  A.DVLP_UTAKMN_MEMB = B.MEMB
AND    A.PGM_MDL_ID LIKE '%'||:pgm_mdl_id||'%'

pgm_mdl_id는     'saaa001q1'과  '11002'와 같은 아이디가 들어가있는데요

입력받는 아이디에 'saaa001q1'를 넣고 조회하면은 조회가 되는데

'11002'를 넣고 조회를 하면은 ORA-01722: 수치가 부적합합니다 라는 에러가 나는데요

어떻게 해결을 해야되는지 잘모르겠어요 pgm_mdl_id컬럼 타입은 varchar2(50)입니다.

 

 

 

by 김강환 [2008.11.07 08:54:29]
문자형은 숫자형의 하위 데이타타입입니다. 즉 , 원래는 다 숫자형인데 여러가지 개발의 편의성을 위해 숫자형에서 별도로 나누어 문자형이라는 데이타타입을 만든거지요.
이로인해 문자형을 숫자형으로 변형하는건 별 탈없이 묵시적캐스팅이 일어나지만 숫자형을 문자형으로의 묵시적 캐스팅은 에러가 발생합니다.

님의 경우 A.PGM_MDL_ID 가 문자형인데 11002 이라는 숫자형이 들어올 경우 이를 문자형으로 묵시적 캐스팅하는 과정에서 위와 같은 에러가 난겁니다. 따라서 에러를 방지하려면 입력변수 pgm_mdl_id를 TO_CHAR(pgm_mdl_id) 로 강제 캐스팅해 주셔야 합니다

by madcat [2008.11.07 09:06:30]
제가 생각하기에는 테이블에 유효하지 않은 데이터가 들어가 있을 가능성이 높습니다. WHERE절 보다는 SELECT절에 컬럼들의 값들을 체크해 보세요.

by 오병운 [2008.11.07 09:53:55]
김강환님 ,madcat님 감사합니다. 문제는 강환님 말대로 였네요..
해결되었습니다. 감사합니다. ^-^

by 마농 [2008.11.07 10:02:04]
madcat님 말씀처럼 문제는 다른곳에 있습니다.
where절이 문제가 아니라 select절이 문제입니다.
select절에 to_char또는 to_date, to_number등의 데이터타입변경이 있을 것이고,
'saaa001q1'에 해당하는 자료들은 오류가 없으나
'11002'의 자료에는 데이터 변경이 불가능한 오류자료가 포함되어 있을 것입니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입