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 39180 게시물 읽기
No. 39180
9i 작동하는 SQL 이 11g 에서 INDEX 유무에 따라 작동이 안돼요.
작성자
박재덕(jdpark)
작성일
2011-12-21 09:56ⓒ
2011-12-21 09:57ⓜ
조회수
4,611

1)

Select /*+ INDEX(a INDEX_1) */ a.QTY
 from  TABLEA a
 Where a.COLUMN = 02505318   ;  -- INDEX 사용 문자열 Type 칼럼에 숫자로 입력

ERROR:
ORA-01722: invalid number

********************************************
2)

Select /*+ INDEX(a INDEX_1) */ a.QTY
 from  TABLEA a
 Where a.COLUMN = '02505318'   ;  -- INDEX 사용 문자열  Type 칼럼에 문자로 입력

       QTY
----------
         1
         1
         1
         1
         1

********************************************
3)

Select  a.QTY
 from  TABLEA a
 Where a.COLUMN = 02505318   ; -- INDEX 사용하지 않고 문자열  Type 칼럼에 숫자로 입력

       QTY
----------
         1
         1
         1
         1
         1

 

a.COLUMN  은 CHAR(8) Type 입니다.

9i 에서는 정상적으로 5개의 row 가 select 되는데

11g 에서는 index 사용 유무와 quotationmarks 사용 유무에 따라 심각한 결과를 초래합니다.

위와 관련해서 방대한 양의 프로그램 소스를 모두 일일이 check 를 해야 하는데

11g 의 option paramter 로 간단히 해결할 수 있는 방법이 없나요?

답변 기다립니다.

건승하세요.

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

정답이 안닐수도 있습니다만

char형과 number형 비교시 char형을 number형으로 형변환후 비교하므로
논리적으로 보면 9i도 같은 에러가 나야 정상입니다.

인덱스 사용유무라기 보다는 형변환 유무의 문제입니다.

COLUMN에 number형 변환이 불가능한 데이타가 11g에는 있고
9i에는 없는듯 보입니다.

참고) 숫자형 변환이 불가능한 데이타 찾기
Select *
 from  TABLEA a
 Where TRANSLATE(COLUMN, 'a1234567890', 'a') IS NOT NULL

 

dol님이 2011-12-21 18:51에 작성한 댓글입니다.
이 댓글은 2011-12-21 18:52에 마지막으로 수정되었습니다. Edit

모(unknown) 업체 담당자에게서 온 내용입니다.

 1. 1차적으로 확인된 비교조건에서 a.COLUMN 에 대해 비교값을 string 으로 주느냐 number 로 주느냐에 따라 결과가 달라집니다. 하지만 실제 a.COLUMN 의 자료형은 CHAR(8) 입니다.

즉, 올바른 자료형을 대입하면 문제가 없는 상황입니다.
 

2. SQL 뿐 아니라 모든 언어에서 기본적으로 NUMBER 와 STRING 형태의 자료형에 대해 '명확한 conversion' 을 해주시는 것이 필요합니다.

대부분의 고급언어와 같이 Oracle SQL 처리에 있어 사용자 편의를 위해 암묵적 변화를 도와드리지만,

때에 따라 이 부분이 완벽하지 않을 수 있습니다.

박재덕(jdpark)님이 2011-12-26 09:41에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39183MView를 update, insert된 데이타에 대해서만 만들수 있을까요?
장태성
2011-12-22
3586
39182oracle database 이전에 따른 체크사항
jks
2011-12-22
3920
39181이미 만들어진 테이블의 INITIAL 크기 변경가능?
궁금이
2011-12-21
3379
391809i 작동하는 SQL 이 11g 에서 INDEX 유무에 따라 작동이 안돼요. [2]
박재덕
2011-12-21
4611
39179여러 테이블에 INSERT문 실행 시 순서 [1]
한호연
2011-12-20
3803
39178두개의 Table에서 조건값 구하기 [1]
프돌이
2011-12-20
4568
39177오류가 납니다.(ORA-01722) [2]
초보
2011-12-20
4603
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다