문서유형ㅣ기술정보
분야ㅣAPP개발
적용제품버전ㅣ T6, T7
문서번호ㅣTDETI012
개요
티베로에서는 IN 조건 수에 대해 특별한 제한 값이 없이 사용 가능합니다.
방법
1. Composite 비교 가능
<예시>
SQL> CREATE TABLE TEST (NO NUMBER, NAME VARCHAR(10));
SQL> INSERT INTO TEST
SELECT LEVEL, 'NAME'||LEVEL FROM DUAL CONNECT BY LEVEL < 100001;
SQL> COMMIT;
SQL> SELECT * FROM TEST WHERE NO IN (1,2,...중략,29999,30000);
NO NAME
---------- ----------
1 NAME1
2 NAME2
...중략
29999 NAME29999
30000 NAME30000
SQL> SELECT * FROM TEST WHERE (NO,NAME) IN ((1,'NAME1'),(2,'NAME2'),
...중략
(29999,'NAME29999'),(30000,'NAME30000'));
NO NAME
---------- ----------
1 NAME1
2 NAME2
...중략
29999 NAME29999
30000 NAME30000
2. Char semantic 비교 가능
<예시>
SQL> CREATE TABLE TEST (NO NUMBER, CHA CHAR(10));
SQL> INSERT INTO TEST
SELECT LEVEL, 'CHA'||LEVEL FROM DUAL CONNECT BY LEVEL < 1000001;
SQL> COMMIT;
SQL> SELECT * FROM TEST WHERE CHA IN ('CHA1','CHA2',
...중략
'CHA29999','CHA30000');
NO CHA
---------- ----------
1 CHA1
2 CHA2
...중략
29999 CHA29999
30000 CHA30000
SQL> SELECT * FROM TEST WHERE (NO,CHA) IN ((1,'CHA1'),(2,'CHA2'),...중략
(29999,'CHA29999'),(30000,'CHA30000'));
NO NAME
---------- --------------------
1 CHA1
2 CHA2
...중략
29999 CHA29999
30000 CHA30000
3. in 조건의 컬럼의 DATA TYPE이 달라지지 않는 경우
<예시>
SQL> CREATE TABLE TEST (NO NUMBER, NAME VARCHAR(10));
SQL> INSERT INTO TEST VALUES (1,1);
SQL> INSERT INTO TEST VALUES (2,2);
SQL> INSERT INTO TEST VALUES (3,3);
SQL> SELECT * FROM TEST WHERE NAME IN (1,2,3);
NO NAME
---------- ----------
1 1
2 2
3 3
SQL> INSERT INTO TEST VALUES (4,'A');
SQL> SELECT * FROM TEST WHERE NAME IN (1,2,3);
TBR-5074: Given string does not represent a number in proper format.
-> IN 리스트에 number type만 있을 때는 자동 형변환으로 출력이 되지만
데이터 중 숫자로 변환이 불가능한 값이 있을 때는 수행 불가
주의사항
위의 조건을 만족하지 못하는 경우에는 일반적인 expression 의 제한에 따르게 됩니다.
(하나의 expression 을 계산하면서 필요한 temp value 갯수가 65535 제한)
이 경우에는 expression 사용에 따라 제한 개수가 달라지게 됩니다.