메뉴 건너뛰기

Korea Oracle User Group

PL/SQL

상관관계 Subquery의 경우 1 level 까지만 참조가 가능

 

 

ANSI SQL의 경우 correlation Subquery의 경우 1 level 수준에서만 테이블 참조를 가능하게 하고 있다.

아래는 관련 근거 내용이다.

아래와 같이 사용하게 되면 904 에러를 만나게 된다.

 

select (select count(*) 
        from (select * 
              from scott.emp 
              where ename = dual.dummy)) 
from dual;

ERROR at line 1:
ORA-00904: "DUAL"."DUMMY": invalid identifier

 

반면 아래와 같이 변경을 하면 에러 없이 수행이 가능합다.

 

select (select count(*) 
        from scott.emp 
        where ename = dual.dummy) 
from dual;

(SELECTCOUNT(*)FROMSCOTT.EMPWHEREENAME=DUAL.DUMMY)
--------------------------------------------------
                                                 0

 

위 경우가 1 level 수준의 참조를 한 경우이고 맨 처음의 경우가 1 level 이상의 참조를 한 경우이다.

현재 일부 오라클 버전에서는 1 level 이상의 참조를 한 SQL이 정상적으로 동작하는 경우가 있다.
정상적으로 수행된 경우가 버그인 것이다.

하지만 해당 버전에서도 final 패치까지 진행한 경우라면 해당 SQL은 정상적으로 동작하지 않을 것이다.

 

출처 : https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1853075500346799932

 

오라클 SR에서의 답변

 

ORA-904 After Upgrade To 10.2.0.5 Or 11.2.0.1 for a statement having a Subquery ( Doc ID 1190423.1 ) 
This is due to fix of Bug 6414184 which got included in 10.2.0.5 and 11.2. It is expected behavior to get a ORA-904 
To fix the ORA-904 error please modify the query such that the object referenced is within the scope of the subquery. 

 

 

 

 


 

 

 

 

 

 

위로