더북(TheBook)

④ SYS_CONNECT_BY_PATH (colm, char)

SYS_CONNECT_BY_PATH는 계층형 쿼리에서만 사용할 수 있는 함수로, 루트 노드에서 시작해 자신의 행까지 연결된 경로 정보를 반환한다. 이 함수의 첫 번째 파라미터로는 컬럼이, 두 번째 파라미터인 char은 컬럼 간 구분자를 의미한다. 그럼 부서에 대한 경로 정보를 추출해 보자.

입력

    SELECT department_id, LPAD(' ' , 3 * (LEVEL-1)) || department_name, LEVEL,
           SYS_CONNECT_BY_PATH( department_name, '|')
      FROM departments
      START WITH parent_id IS NULL
      CONNECT BY PRIOR department_id  = parent_id;
그림 7-11 SYS_CONNECT_BY_PATH

각 로우별로 어떤 계층 경로를 타고 있는지 알 수 있다. 두 번째 매개변수인 구분자로 해당 컬럼 값에 포함된 문자는 사용할 수 없다는 점을 주의해야 한다. 위 쿼리에서 구매/생산부는 ‘/’문자가 속해 있는데, 구분자로 ‘/’를 사용하면 다음과 같은 오류가 발생한다.

입력

    SELECT department_id, LPAD(' ' , 3 * (LEVEL-1)) || department_name, LEVEL,
           SYS_CONNECT_BY_PATH( department_name, '/')
      FROM departments
     START WITH parent_id IS NULL
     CONNECT BY PRIOR department_id  = parent_id;

결과

    SQL 오류: ORA-30004: SYS_CONNECT_BY_PATH 함수를 사용할 때 열 값의 일부로 분리자를 사용할 수 없습니다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.