티스토리 뷰
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에서 루프가 발생했음을 알 수 있습니다
'[개발]프로그래밍 > sql' 카테고리의 다른 글
[oracle] SYS_CONNECT_BY_PATH - 루트 찾아가기 (1) | 2016.10.26 |
---|---|
[oracle] CONNECT_BY_ISLEAF - 자식 노드 찾기 (1) | 2016.10.26 |
[oracle] CONNECT_BY_ROOT - 최상위 루트노드 찾기 (0) | 2016.10.25 |
[oracle] START WITH ... CONNECT BY - 계층형 쿼리 (1) | 2016.10.25 |
[oracle] MINUS - 특정 테이블 속한 데이터 표시(차집합) (0) | 2016.10.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday