태그 보관물: START WITH

[Oracle/오라클] START WITH 재귀호출 쿼리

안녕하세요!

오늘은 오라클(Oracle)START WITH 재귀호출 쿼리에 대해 말씀드리겠습니다.
START WITH 함수는 Oracle 11g 이상의 버전에서 사용할 수 있습니다.

그럼 먼저 재귀호출이란 무엇인지 간단히 알아보도록 하겠습니다.


재귀호출(Recursive Call)이란?

재귀호출이란 말 그대로 자기 자신을 계속해서 호출하는 것을 뜻 합니다.

Working of C recursion

자기 자신을 무한히 호출하게 되면 프로그램이 무한히 실행되는 현상이 있어, 그 만큼 조심히 다뤄야하는 알고리즘 입니다.
재귀함수의 활용하기 좋은 것으로는

  • 피보나치 수열
  • 윈도우 폴더/파일 구조
  • 팩토리얼 등등…

등등 아주 아주 다양합니다.
재귀호출에 대한 자세한 내용은 다음에 한번 다뤄보도록 하겠습니다.


START WITH ~ CONNECT BY

그래서 오늘의 주제 START WITH 함수는 뭐냐?
위에서 말씀드렸듯이 재귀호출 알고리즘을 활용하여 오라클 측에서제공하는 함수입니다.
예를 들어 폴더/파일 구조처럼 재귀호출을 통해 구현된다고 생각하시면 됩니다.

사용법은 아래와 같습니다.

SELECT [컬럼]…
FROM [테이블]
WHERE [조건]
START WITH [최상위 조건]
CONNECT BY [NOCYCLE][PRIOR 계층형 구조 조건];

1.8 Directory structure | An Introduction to R

예시)

SELECT NAME
FROM FOLDER
START WITH NAME = ‘ROOT’
CONNECT BY NOCYCLE PRIOR NAME = PARENT_NAME
  1. FOLDER 테이블에서 NAME 컬럼만 조회할 것인데
  2. 최상위 폴더는 ROOT로 설정할 것이고
  3. ‘NAME’ 컬럼의 값(ROOT)과 ‘PARENT_NAME’ 컬럼(data, R, Rmd, scripts, output)의 값을 가져오고
  4. 값이 있다면 재귀호출과 같이 ‘NAME’ 컬럼의 값(data, R, Rmd, scripts, output)과 ‘PARENT_NAME’ 컬럼(rawdata, processeddata, metadata)의 값을 또 가져오고
  5. 이후 값이 없다면 조회 된 결과를 반환합니다.

NOCYCLE : 무한루프를 방지하기 위함
PRIOR : 계층구조를 표현하기 위함

 

이상입니다.

오늘도 감사합니다 ^__^