티스토리 뷰

1. CONNECT_BY_ISCYCLE - 역할

계층형 쿼리에서 해당하는 로우가 자식노드를 가지고 있는데 다시 부모느드 인지를 찾아주는 함수


중복참조하여 자식노드가 있을 경우 1 , 그렇지 않을 경우 0을 반환


2. CONNECT_BY_ISCYCLE - 기본 테이블

◈ TEST_TABLE_ONE


 IDX

NAME

ID

 P_LEVEL

 PP_LEVEL

 1

테스트1

test1

 1

  2 

 2

테스트2

test2

 2

 1

 3

테스트3

test3

 3

 1

 4

테스트4

test4

 4

 2

 5

테스트5

test5

 5

 2


3. CONNECT_BY_ISCYCLE  - SQL 문장

◈ SQL

1
2
3
4
5
6
SELECT LEVEL
            ,LPAD(' ' ,2*(LEVEL-1)) || NAME AS NAME
            ,CONNECT_BY_ISCYCLE AS CYCLE 
            FROM  TEST_TABLE_ONE
                START WITH P_LEVEL=1
                CONNECT BY NOCYCLE PRIOR P_LEVEL=PP_LEVEL           






◈ 결과 테이블


 LEVEL

NAME

CYCLE 

 1

테스트1

0

 2

  테스트2

 1 

 3

      테스트4 

 0 

 3

     테스트5

0

 2

  테스트3

0




◈ 설명


현재 테스트1의 상위노드는 테스트2가 되고 테스트2의 상위노드는 1이 되는 상황입니다


만약 CONNECT_BY_ISCYCLE 과 CONNECT BY 부분에 NOCYCLE 이 빠져 있다면 문장은 무한 루프라는 에러를 발생시킵니다


그래서 위의 SQL 문장으로 보면 테스트2의 CYCLE에 1이라고 나옵니다


결국은 테스트2에서 루프가 발생했음을 알 수 있습니다




댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday