ORA-01722: 수치가 부적합합니다 에러가 발생합니다 0 7 3,499

by 밀크캬라멜 ORA-01722 [2015.02.10 11:24:53]


 

안녕하세요

테이블 A와 B에 emp_no라는 칼럼이 있는데요 (char(7))

토드로 조회 시

select * from A where emp_no = 22222

하면 조회가 되는데

select * from B where emp_no = 22222 하였더니 수치가 부적합하다는 오류가 뜹니다

데이터 형이 같은데 왜 그런가요?

by spencer [2015.02.10 11:35:36]

Try this:

select * from A where emp_no = '22222';


by 밀크캬라멜 [2015.02.10 11:39:59]

그 방법은 잘 됩니다....ㅠ.ㅠ 도데체 무슨 원리로 A테이블은 조회가 가능하나 B테이블은 숫자로 조회가 가능하지 않는지 궁금해서 질문드려요


by jkson [2015.02.10 12:01:48]

아마도 a 테이블에 emp_no 컬럼의 데이터는 숫자로만 이루어져 있는 문자만(ex '1111','2222'...) 있을 거구요. b 테이블에 emp_no 컬럼에는 숫자가 아닌 문자로 이루어진 데이터(ex '111A','2E22'..)가 있을 거예요. a 테이블의 컬럼과 조회조건인 숫자형(22222)을 비교할 때 숫자로만 이루어진 문자형 데이터는 숫자로 변환해주어 비교하지만 b 테이블에 있는 숫자가 아닌 문자로 구성된 데이터는 숫자형으로 변환이 불가하므로 뜨는 에러 같네요. 조회조건 컬럼이 문자형이면 ''는 붙여주세요. 습관적으로 ''를 붙이지 않게 되면 현재는 조회가 잘 될지 모르겠으나 추후에 데이터가 변경되면 위와 같은 오류가 생길 수 있어요.


by 밀크캬라멜 [2015.02.10 13:37:27]

A테이블이나 B테이블에 있는 emp_no는 사번으로 다 숫자만 들어가고있습니다.

현재 프로시저에서 function(함수) 콜 시에 사번을 넘겨주어서

함수에서 NUMBER 변수로 받아서 사용하고 있거든요..ㅠㅠ 

같은 프로시저 내 다른 함수는 같은 방법으로 수치가 부적합하다는 오류는 나지 않는데

이 함수만 오류가 떠서 질문드렸습니다 ㅠㅠ CHAR변수에 저장하여 사용하니 잘 되네영..


by jkson [2015.02.10 13:47:32]

SELECT * FROM B

WHERE (TRANSLATE(emp_no, '1234567890' ||emp_no, '1234567890') != emp_no

로 양쪽 테이블 모두 조회해보세요.


by 마농 [2015.02.10 13:45:24]

문제 해결이 안되는 원인은...
에러메시지를 그대로 받아들이지 않는데 있습니다.
오류 자료가 없다고 장담 하실일이 아닙니다.
오류 자료가 있을 것이라고 생각되네요.
오류 자료를 찾아보세요.

SELECT *
  FROM b
 WHERE TRANSLATE(TRIM(emp_no), 'a0123456789', 'a') IS NOT NULL
;

 


by 밀크캬라멜 [2015.02.11 11:53:36]

헉 진짜 숫자가 아닌 데이터가 존재하였네요 ㅠㅠ 당연히 없을 줄 알았던 제잘못이에요ㅠㅠ죄송합니다

오류 자료 찾는 좋은 쿼리 감사합니다 ㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입