상관관계 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.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
4 | [SQL] ORA-01723 해결안 | 우뽕 | 2020.01.21 | 3480 |
3 | FOR LOOP 사용시 lower, upper limit에 대한 컨트롤 [1] | 명품관 | 2017.01.24 | 394 |
2 | Why use PL/SQL(PL/SQL – The right way) | 명품관 | 2016.08.31 | 1617 |
» | 상관관계 Subquery의 경우 1 level 까지만 참조가 가능 | 명품관 | 2016.01.22 | 516 |