주기적으로 SELECT 를 해서 데이터를 가져오는 프로세스가 있는데,
데이터가 없을땐 없는 상태로 SELECT 를 하지만 데이터를 삽입하면, 바로 ORA-01722: invalid number 에러가 출력 됩니다.;;
이런 경우는 처음인데 왜 그런걸까요?
SELECT a.seqno, call, req, cont.msg, reqtime, cont.ms_no, FROM data LEFT JOIN cont ON data.FKCONTENT = cont.SEQNO WHERE reqtime > sysdate AND result IN ( 0,9 ) AND ROWNUM < 3000;
숫자가 아니라는 오류죠.
질문하실 때 좀 더 명확하게 해주실 필요가 있습니다.
- 어느 테이블에 입력을 했다는 건지?
- 에러가 Insert 할 때 난다는 건지? Insert 후 Select 할 때 난다는 건지?
Select 할 때 에러난다고 가정하면... 의심할 수 있는 부분은 두군데입니다.
1. data.fkcontent = cont.seqno
=> 두 컬럼 중 한 컬럼이 숫자형이고 한컬럼은 문자형인데... 문자형 컬럼에 숫자가 아닌 문자가 저장된 경우
2. result IN (0, 9)
=> result 컬럼이 문자형이고 숫자가 아닌 자료 저장되어 있는 경우.
Insert 할 때 나는 에러라면?
=> 숫자컬럼에 문자 입력한거죠.
- 어느 테이블에 입력을 했다는 건지?
Data 테이블을 주기적으로 select 문을 날려서 데이터처리를 합니다. 그래서 cont 테이블에 insert 후 해당 seq 를 참조하여 data 테이블에 insert 를 하게 되면 주기적으로 select 를하다가 데이터가 있으면 처리하는 방식입니다.
- 에러가 Insert 할 때 난다는 건지? Insert 후 Select 할 때 난다는 건지?
데이터가 입력되기전 select 를 할 때는 이상이 없다가 insert 문을 한 후에는 해당 에러가 발생합니다.
Select 할 때 에러난다고 가정하면... 의심할 수 있는 부분은 두군데입니다.
1. data.fkcontent = cont.seqno
=> 두 컬럼 중 한 컬럼이 숫자형이고 한컬럼은 문자형인데... 문자형 컬럼에 숫자가 아닌 문자가 저장된 경우
- 두컬럼 모두 number 타입의 컬럼입니다.
2. result IN (0, 9)
=> result 컬럼이 문자형이고 숫자가 아닌 자료 저장되어 있는 경우.
- result 컬럼은 문자형이며 숫자로 insert 하게 됩니다.
- 0,9 는 string 으로 맵핑되어 있는 값을 넘겨주어 쿼리를 완성 하게 되는데, 로그를 찍으니 저렇게 나오더라구요.
이외의 다른 경우는 없는 걸까요.?