ORA-01719 에러

2025. 1. 21.·Oracle/SQL

Oracle 23ai부터 IN 조인 조건에 대해 ORA-01719 에러가 발생하지 않습니다.

아래는 V$SYSTEM_FIX_CONTROL 뷰에서 ORA-01719 에러와 관련된 Fix Control을 조회한 결과입니다.

SELECT bugno, value, sql_feature, description, optimizer_feature_enable
  FROM v$system_fix_control
 WHERE bugno IN (6610822, 32436948);

   BUGNO VALUE SQL_FEATURE                    DESCRIPTION                                   OPTIMIZER_FEATURE_ENABLE
-------- ----- ------------------------------ --------------------------------------------- ------------------------
 6610822     1 QKSFM_CBO_6610822              allow (+) in OR clause                        10.2.0.5
32436948     1 QKSFM_TRANSFORMATION_32436948  Allow disjunction in outer join in more cases 23.1.0

2 rows selected.

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다.

-- 1
DROP TABLE t1 PURGE;
DROP TABLE t2 PURGE;

CREATE TABLE t1 (c1, c2, c3) AS SELECT ROWNUM, ROWNUM, ROWNUM FROM XMLTABLE ('1 to 100');
CREATE TABLE t2 (c1, c2, c3) AS SELECT ROWNUM, ROWNUM, ROWNUM FROM XMLTABLE ('1 to 100');

 

아래는 6610822 Fix Control을 테스트한 결과입니다.

-- 2-1
SELECT *
  FROM t1 a, t2 b
 WHERE b.c1(+) = a.c1 AND b.c2(+) IN (1, 2);
...
100 rows selected.

-- 2-2
SELECT /*+ OPT_PARAM('_fix_control' '6610822:0') */
       *
  FROM t1 a, t2 b
 WHERE b.c1(+) = a.c1 AND b.c2(+) IN (1, 2);

ORA-01719: outer join operator (+) not allowed in operand of OR or IN

 

아래는 32436948 Fix Control을 테스트한 결과입니다.

-- 3-1
SELECT *
  FROM t1 a, t2 b
 WHERE b.c1(+) = a.c1 AND b.c2(+) IN (a.c2, a.c3);
...
100 rows selected.

-- 3-2
SELECT /*+ OPT_PARAM('_fix_control' '32436948:0') */
       *
  FROM t1 a, t2 b
 WHERE b.c1(+) = a.c1 AND b.c2(+) IN (a.c2, a.c3);

ORA-01719: outer join operator (+) not allowed in operand of OR or IN

 

ANSI 조인 구문은 IN 조인 조건을 사용해도 에러가 발생하지 않습니다. 아래는 11.2 버전에서 테스트한 결과입니다.

-- 4-1
SELECT *
  FROM t1 a
  LEFT OUTER
  JOIN t2 b
    ON b.c1 = a.c1
   AND b.c2 IN (1, 2);
...
100 rows selected.

-- 4-2
SELECT *
  FROM t1 a
  LEFT OUTER
  JOIN t2 b
    ON b.c1 = a.c1
   AND b.c2 IN (a.c2, a.c3);
...
100 rows selected.
저작자표시 비영리 변경금지 (새창열림)
'Oracle/SQL' 카테고리의 다른 글
  • GROUP BY ALL
  • TIME_BUCKET 함수
  • SQL Macro - Table Expression
  • SQL Macro - Scalar Expression
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 관심을 가져왔습니다. 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며 Oracle 사의 공식적인 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (206)
      • Oracle (177)
        • SQL (36)
        • PLSQL (10)
        • Performance (75)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (7)
      • Exadata (16)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
ORA-01719 에러
상단으로

티스토리툴바