순환 구조 내에서는 JOIN 이 불가능하므로 JOIN 을 수행하는 QUERY 로 구성된 VIEW 에 대해서도 SELECT 가 불가능합니다. 다른 테이블들과의 JOIN 을 하기 위해서는 순환 구조를 가지는 문장을 INLINE VIEW 로 처리한 후 JOIN 에 참여하게 해야 합니다.

 

CONNECT BY 는 순환 구조에서 무한 LOOP 가 발생할 수 있습니다. 이러한 루프는 서로 다른 ROW에 부모와 자식이 존재하는 경우 발생하며, ORA-1436 에러를 발생합니다. 이는 데이터 자체의 논리적 구조의 결함에 의해 발생하는 것입니다. 모든 데이터의 부모 데이터가 항상 존재할 수는 없듯이, 이러한 부분이 있는 지를 검증해보아야만 하고 만약 이렇게 된 겨웅가 있다면 이는 전체적인 구조 설계가 잘못되었거나 대상 테이블에 입력된 데이터가 잘못된 경우 입니다. 대부분 후자의 경우에 무한 LOOP 이 발생하게 됩니다.

 

마지막으로 이와 같은 CONNECT BY 를 사용한 후 ORDER BY 를 사용할 경우 실제로는 결과값이 정렬이 되지는 않았습니다. 하지만 ORACLE 9i 에서부터는 ORDER SIBLINGS BY 라는 구문이 추가되어 실제 값들을 정렬을 수행하면서 순환 구조로 전개가 되어 데이터의 추출이 이루어집니다.

 

출처 : http://cafe.naver.com/marinebang.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1254

+ Recent posts