해당 에러 원인: Oracle IN 구문 사용 시, 항목의 수가 1,000개가 넘어갈 경우 에러가 발생한다.
운영을 하다보면, IN 항목 수가 1,000개가 넘어가는 경우가 생길 수가 있다.
이 때, 간단한 해결 방법 2가지를 정리한다.
1. 복수 컬럼 SubQuery 사용
IN 안에 들어갈 항목에 임의의 칼럼을 삽입한다.
WHERE (0, 비교컬럼) IN ((0, 조건1), (0, 조건2), (0,조건3), ....)
foreach 구문을 사용하는 경우,
As-Is
WHERE T1.CUST_NO IN <foreach collection="myList" item="myListItem" open="(" separator="," close=")"> #{myListItem} </foreach |
To-Be
WHERE (1, T1.CUST_NO) IN <foreach collection="sCheckedCustNoList" item="sCheckedCustNo" open="(" separator="," close=")"> (1, #{sCheckedCustNo}) </foreach> |
이와 같은 방식으로 삽입하면 된다.
2. Union all 사용
각 항목에 대한 쿼리 결과를 union한다.
select *
from 원래테이블 a
,(
(select 컬럼1, 컬럼2, ... from dual) union all
(select 컬럼1, 컬럼2, ... from dual) union all
(select 컬럼1, 컬럼2, ... from dual) union all
....
(select 컬럼1, 컬럼2, ... from dual) //마지막 항 끝에는 union all 없어야 함
) b
where a.컬럼 = b.컬럼
끝.
'IT | 개발 > Database' 카테고리의 다른 글
[Oracle] 집합 연산자 정리 (UNION, UNION ALL, INTERSECT, MINUS) (6) | 2020.01.20 |
---|---|
[오라클 | like] 특정 패턴 조회하기(한 글자, 여러 글자) (0) | 2020.01.19 |
[ORACLE | 함수] IF, ELSIF, ELSE 및 NULL 비교 방법 정리, NO_DATA_FOUND (2) | 2020.01.16 |
[APM 패턴 | PHP] Linux에 MariaDB 설치 및 설정 (소스 파일을 이용한 설치) (0) | 2019.12.28 |
[mysql | mariadb] root 패스워드 변경(분실 시) - Linux (0) | 2019.12.21 |