티스토리 뷰

반응형

목차

     


    WHERE IN 조건에서 1000개 이상 값 넣기

    ORA-01795 : maximum number of expressions in a list is 1000 

    오라클을 사용할 때 이 에러를 보신 적이 있나요?

    왜 이런 에러가 나오는지 그 이유와 해결방법에 대해 알아보도록 하겠습니다.

     

     

     

     

     

    ORA-01795 에러가 나는 원인

     

    다음과 같이 SQL을 사용한다고 가정해보겠습니다.

     

    SELECT *
    FROM TEST_TABLE
    WHERE TEST_IDX IN ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,..., 997, 998, 999, 1000, 1001, 1002)
    ;

     

    TEST_IDX 값을 1~1002까지 조회해야 할 일이 있다고 가정하고 SQL문을 실행합니다.

     

    그리고 에러가 납니다.

     

     

    ORA-01795 : maximum number of expressions in a list is 1000.

     

    도대체 뭘까요..? 문법에는 문제가 없는데...

     

    에러가 나는 원인은 바로 ORACLE의 IN 조건에는 개수의 제한이 걸려있기 때문입니다.

     

    하나의 IN 조건에는 최대 1000개의 값까지만 담을 수 있습니다.

     

    1부터 1002까지 1002개의 값을 넣으면 IN 조건이 1000개가 넘어가기 때문에 에러가 나는 것입니다.

     

     

     

     

    1000개 이상의 값을 하나의 IN 조건에 사용하는 방법

     

    Multiple Column을 사용하면 한 개의 IN 조건에 무한한 값을 넣을 수 있습니다.

     

    아래는 사용 예시입니다.

     

    SELECT *
    FROM TEST_TABLE
    WHERE (0, TEST_IDX) IN ((0, 1), (0, 2), (0, 3), ..., (0,1001), (0,1002))

     

    쉬운 방법이지만, 다소 어지러운 느낌이 있습니다.

     

     

     

     

     

    1000개씩 다수의 IN 조건을 사용하는 방법

     

    이 방법은 현실적으로 많이 사용하는 방법인데요.

     

    IN 조건과 OR을 함께 사용하는 방법입니다.

     

    아래는 사용 예시입니다.

     

     

    SELECT *
    FROM TEST_TABLE
    WHERE TEST_IDX IN ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,..., 997, 998, 999, 1000)
       OR TEST_IDX IN (1001, 1002)
    ;

     

    직관적이고 쉽다는 장점이 있습니다.

     

     

     

     

    마무리

     

    IN 조건에 값을 1000개씩이나 넣는 경우가 있냐고 의문이신 분들이 있을 겁니다. 보통의 경우에는 신경을 쓸 필요가 없지만 엄청난 양을 자랑하는 반도체 생산라인을 관리하는 데이터의 경우, IN 조건에 들어가야 하는 값이 1000개는 우습게 나옵니다. 상황에 따라 10000개가 넘는 경우의 수도 있습니다. 그런 경우에는 여러 번으로 나누어 SQL을 수행하거나 위에서 언급한 방법으로 SQL문을 수행해야 합니다. 위의 방법에서는 언급하지 않았지만 TEMP TABLE을 만들어서 데이터를 임시저장 해놓고 IN조건에 서브 쿼리를 사용하여 추출해내는 방법도 존재합니다.

     

     

    이상 오라클 WHERE IN 조건에서 1000개 이상 값을 넣는 방법에 대해서 알아보았습니다.

     

    반응형