본문 바로가기

개발/오류

[오류] ORA-01722: 수치가 부적합합니다

반응형

수치가 부적합합니다 오류 썸네일

 

DB에서 작업을 하다가 ORA-01722: 수치가 부적합합니다라는 아래와 같은 오류가 나왔습니다.

오류 로그ORA-01722: 수치가 부적합합니다
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.

 

저의 경우는 두 테이블을 조인하는 과정에서 나온 오류인데 알고보니 조인하는 조건값의 데이터 타입이 달랐기 때문이었습니다.

즉, 한쪽은 문자열(String) 타입이고 한쪽은 숫자(Number)로 된 두 컬럼을 조인하려고 해서 나온 오류입니다.

저의 상황을 간단하게 예시로 들자면 아래와 같습니다.

 

SELECT
    MEMBER_NO,
    NAME,
    ID,
    PWD
FROM
    MEMBER_INFO   MI,
    MEMBER_ADD    MA
WHERE
    MI.MEMBER_NO = MA.MEMBER_NO;

 

회원정보를 담고있는 MEMBER_INFO 테이블과 MEMBER_ADD 테이블이 있고, 그 테이블에 각각 MEMBER_NO라는 컬럼이 있다고 가정한 쿼리문인데 이것만 봐서는 문제가 없어보입니다.

하지만 MEMBER_INFO 테이블의 MEMBER_NO는 숫자(Number) 타입이고 MEMBER_ADD 테이블의 MEMBER_NO는 문자(CHAR) 타입이어서 이런 오류가 나는거였습니다.

물론 실제 서비스되는 것 중에 DB를 처음 설계할 때 이런 것들은 당연히 데이터 타입을 일치시키는 게 맞지만 간혹가다가 이렇게 다른 경우가 있더라고요.

이럴 땐 쿼리를 짤 때 두 데이터 타입이 일치하도록 형변환을 해주시면 됩니다.

ORACLE에서 형변환과 관련된 내용은 이전에 정리한 적이 있으니 아래의 글을 참고해주세요.

 

 

[ORACLE] TO_CHAR, TO_DATE, TO_NUMBER

TO_CHAR 함수 ▶ 사용방법 SELECT TO_CHAR(칼럼명) FROM (테이블명) SELECT TO_CHAR(컬럼명, 포맷 설정) FROM (테이블명) ▶ 예시 아래의 쿼리는 MEMBER라는 테이블에 USER_NUM, JOIN_DATE라는 칼럼이 있다는 가정..

smile-place.tistory.com

 

 

반응형