database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40232 게시물 읽기
No. 40232
ORA-01722: invalid number 황당하네요..
작성자
새하정(lsmsj)
작성일
2013-08-26 13:33ⓒ
2013-08-26 13:58ⓜ
조회수
12,210

안녕하세요. 아래와 같은 쿼리가 있습니다.

1. 운영서버에서 아무런 에러없이 정상데이터출력.

2. 개발서버에서 제목과 같은 ORA-01722 에러 발생.

AND B.POSTAL_CODE = REPLACE(C.POSTAL_CODE,'-','') 이부분에서 발생을 합니다. 

B테이블은 뷰테이블이며 B.POSTAL_CODE 의 데이터형식은 VARCHAR2(12) 형식입니다.

C테이블의 C.POSTAL_CODE 의 데이터형시도 VARCHAR2(12) 형식입니다.

개발에서도 에러를 발생하지 않도록 하려면 어떻게 조치하는게 좋을까요. 운영에 영향이 안가도록.

SELECT NULL AS DESTINATION_CODE ,
       B.POSTAL_CODE ,
       B.ADDRESS_BASIC ,
       B.ADDRESS_DETAIL ,
       TO_CHAR(C.ZONE_CODE) AS ZONE_CODE ,
       'DC' AS FLAG
  FROM T_DC B,
       T_ZONE C
 WHERE B.DC_CODE = 29
       AND B.POSTAL_CODE = REPLACE(C.POSTAL_CODE,'-','')

이 글에 대한 댓글이 총 12건 있습니다.

동일한 데이터형식 varchar2 끼리 비교를 하는데 왜 에러가 발생하는걸까요.

새하정(lsmsj)님이 2013-08-26 13:34에 작성한 댓글입니다.
이 댓글은 2013-08-26 13:58에 마지막으로 수정되었습니다.

혹시 b.dc_code 가 VARCHAR2 컬럼 아닌가요?

마농(manon94)님이 2013-08-26 14:26에 작성한 댓글입니다.

b.dc_code 는 number 형식입니다.

위 질문 쿼리에서 제일 마지막 AND B.POSTAL_CODE = REPLACE(C.POSTAL_CODE,'-','')

조건을 주석처리하고 실행을 해보면 정상적으로 데이터출력이 됩니다.

새하정(lsmsj)님이 2013-08-26 14:30에 작성한 댓글입니다.
이 댓글은 2013-08-26 14:31에 마지막으로 수정되었습니다.

B.POSTAL_CODE => TO_CHAR(B.POSTAL_CODE) 

하셔도 에러 나나요?

AND TO_CHAR(B.POSTAL_CODE) = REPLACE(C.POSTAL_CODE,'-','')

 

아린(arin76)님이 2013-08-26 14:53에 작성한 댓글입니다.

마농님 네. 알려주신대로 and조건의 b.postal_code를 to_char로 감싸줘도 에러가 발생합니다.

기존 문자컬럼을 또 문자로 변경하니 에러가 발생하는걸로 판단되옵니다.

 

새하정(lsmsj)님이 2013-08-26 15:00에 작성한 댓글입니다.
이 댓글은 2013-08-26 15:01에 마지막으로 수정되었습니다.

B.POSTAL_CODE 는 VARCHAR2 가 확실한가요?

 

위 쿼리가 전체 쿼리인가요? 혹시 일부만 발췌?

마농(manon94)님이 2013-08-26 15:08에 작성한 댓글입니다.
이 댓글은 2013-08-26 15:09에 마지막으로 수정되었습니다.
"기존 문자컬럼을 또 문자로 변경하니 에러가 발생하는걸로 판단"

문자나 숫자값을 한번더 같은 타입으로 형변환해도 문제가 되진않아요

SELECT TO_NUMBER(숫자) 숫자
     , TO_CHAR(문자) 문자 
  FROM (SELECT 123 숫자, 'AAA' 문자, ROWNUM rn 
          FROM dual
        )
아린(arin76)님이 2013-08-26 15:14에 작성한 댓글입니다.

네. B.POSTAL_CODE 형식은 VARCHAR2가 확실합니다.

문제가 무엇인지..휴...별거아니것같은데..안풀리네요

새하정(lsmsj)님이 2013-08-26 15:27에 작성한 댓글입니다.

 에러발생이유는  문자와 숫자 비교시 

자동형변환 때문에 발생되는것 같은데요.
(즉, 문자 => 숫자 형변환시 숫자로 변환되지않는문자때문)

그런데, 현재 비교되는 데이터형들은 모두 동일하다고 하니깐
조금 이상하네요. (문제될게 없는것 같은데 말이죠) 

-- 숫자형 - 숫자형 비교
-- 문자형 - 문자형 비교
WHERE B.DC_CODE = 29      
  AND B.POSTAL_CODE = REPLACE(C.POSTAL_CODE,'-','')
  
  
혹시, 에러나는 부분의 관련 데이터를 볼수있나요?
아린(arin76)님이 2013-08-26 15:52에 작성한 댓글입니다.

위 쿼리가 전체 쿼리인가요? 혹시 일부만 발췌한건 아닌지요?

마농(manon94)님이 2013-08-26 16:10에 작성한 댓글입니다.

union all이 걸려있는 하위단의 쿼리를 발췌한것입니다.

에러가 발생하는 하위단만 수정을 하면될것같아서요.

새하정(lsmsj)님이 2013-08-26 16:23에 작성한 댓글입니다.
이 댓글은 2013-08-26 16:24에 마지막으로 수정되었습니다.

마농님..조회조건을 변경하여 조회를 해보았습니다.

where 1=1

and B.DC_CODE = 29

AND B.POSTAL_CODE = REPLACE(C.POSTAL_CODE,'-','')

위 and조건들을 번갈아 가면서 주석을달고 날렸을경우 이상없이 조회가 나왔습니다.

무언가 이상했습니다...

b테이블은 view로되어있어 원본 테이블에서 dc_code값을 확인해보았더니.

숫자형식이 아닌 이상한 값이 검색이 되어 삭제를 한다음부터는 정상적으로 이상없이

잘되네요..   휴.....조언을 주셔서 감사합니다. 저와 같은 일을 겪는분들..없었으면 합니다.!!

즐거운 하루 보내세요.!!!!

새하정(lsmsj)님이 2013-08-26 17:21에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40235EXISTS 의 간단한 이해도를 높일수 있는 예가있을까요. [1]
새하정
2013-08-27
6624
40234오라클 tablespace 와 import 질문 드립니다.
김기춘
2013-08-27
5763
40233Pro*C 에서 bind sql 사용 시 table 이름 [1]
jangmin
2013-08-27
5473
40232ORA-01722: invalid number 황당하네요.. [12]
새하정
2013-08-26
12210
40231문자열 변환 문의드립니다. [2]
김홍찬
2013-08-22
6021
40230전월까지 누계약 월별로 구하는 쿼리 [2]
프로그래머
2013-08-20
6657
40229쿼리 질문입니다.ㅠ [1]
새내기
2013-08-20
5969
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다