본문 바로가기
DataBase/Oracle

START WITH ... CONNECT BY 절

by 언덕너머에 2014. 5. 19.
계층적 질의란 테이블에 포함된 행(ROW)간에 수직적 계층 관계가 성립되는 데이터에 대하여 계층 관계에 따라 각 행을 출력하는 질의이다. 
START WITH ... CONNECT BY 절은 SELECT 구문과 결합하여 사용된다.

사용 예)
SELECT COLUMN_LIST
    FROM TABLE_JOINS | TABLES
    [WHERE JOIN_CONDITIONS AND/OR FILTERING_CONDITIONS]
    [START WITH CONDITION]
    CONNECT BY [NOCYCLE] CONDITION

CONNECT BY [NOCYCLE] PRIOR 절
*PRIOR : CONNECT BY 조건식은 한 쌍의 행에 대한 상-하 계층 관계(부모-자식 관계)를 정의하기 위한 것으로, 조건식 내에서 하나는 부모(PARENT)로 지정되고, 
다른 하나는 자식(CHILD)으로 지정된다. 이처럼 행 간의 부모-자식 간 계층 관계를 정의하기 위하여 CONNECT BY 조건식 내에 PRIOR 연산자를 이용하여 
부모 행의 컬럼 값을 지정한다. 즉, 부모 행의 컬럼 값과 같은 컬럼 값을 가지는 모든 행은 자식 행이 된다.
*NOCYCLE : CONNECT BY 절의 조건식에 따른 계층 질의 결과는 루프를 포함할 수 있으며, 이것은 계층 트리를 생성할 때 무한 루프를 발생시키는 원인이 될 수 있다. 
따라서, CUBRID는 루프를 발견하면 기본적으로 오류를 반환하고, 특수 연산자인 NOCYCLE이 CONNECT BY 절에 명시된 경우에는 오류를 발생시키지 않고 
해당 루프에 의해 검색된 결과를 출력한다.
만약, CONNECT BY 절에서 NOCYCLE이 명시되지 않은 계층 질의문을 수행 중에 루프가 감지되는 경우, CUBRID는 오류를 반환하고 해당 질의문을 취소한다. 
반면, NOCYCLE이 명시된 계층 질의문에서 루프가 감지되는 경우, CUBRID는 오류를 반환하지는 않지만 루프가 감지된 행에 대해 
CONNECT_BY_ISCYCLE 값을 1로 설정하고, 더 이상 계층 트리의 검색을 확장하지 않을 것이다.


'DataBase > Oracle' 카테고리의 다른 글

sequence 생성  (0) 2015.02.26
Database Configuration Assistant로 Database 생성하기  (0) 2015.02.24
Net Configuration Assistant 설정  (0) 2015.02.20
사용자 생성 및 권한부여  (0) 2015.02.15