해당 에러 원인: 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.컬럼

끝.

+ Recent posts