안녕하세요!
오늘은 오라클(Oracle)의 START WITH 재귀호출 쿼리에 대해 말씀드리겠습니다.
START WITH 함수는 Oracle 11g 이상의 버전에서 사용할 수 있습니다.
그럼 먼저 재귀호출이란 무엇인지 간단히 알아보도록 하겠습니다.
재귀호출(Recursive Call)이란?
재귀호출이란 말 그대로 자기 자신을 계속해서 호출하는 것을 뜻 합니다.
자기 자신을 무한히 호출하게 되면 프로그램이 무한히 실행되는 현상이 있어, 그 만큼 조심히 다뤄야하는 알고리즘 입니다.
재귀함수의 활용하기 좋은 것으로는
- 피보나치 수열
- 윈도우 폴더/파일 구조
- 팩토리얼 등등…
등등 아주 아주 다양합니다.
재귀호출에 대한 자세한 내용은 다음에 한번 다뤄보도록 하겠습니다.
START WITH ~ CONNECT BY
그래서 오늘의 주제 START WITH 함수는 뭐냐?
위에서 말씀드렸듯이 재귀호출 알고리즘을 활용하여 오라클 측에서제공하는 함수입니다.
예를 들어 폴더/파일 구조처럼 재귀호출을 통해 구현된다고 생각하시면 됩니다.
사용법은 아래와 같습니다.
SELECT [컬럼]… FROM [테이블] WHERE [조건] START WITH [최상위 조건] CONNECT BY [NOCYCLE][PRIOR 계층형 구조 조건]; |
예시)
SELECT NAME FROM FOLDER START WITH NAME = ‘ROOT’ CONNECT BY NOCYCLE PRIOR NAME = PARENT_NAME |
- FOLDER 테이블에서 NAME 컬럼만 조회할 것인데
- 최상위 폴더는 ROOT로 설정할 것이고
- ‘NAME’ 컬럼의 값(ROOT)과 ‘PARENT_NAME’ 컬럼(data, R, Rmd, scripts, output)의 값을 가져오고
- 값이 있다면 재귀호출과 같이 ‘NAME’ 컬럼의 값(data, R, Rmd, scripts, output)과 ‘PARENT_NAME’ 컬럼(rawdata, processeddata, metadata)의 값을 또 가져오고
- 이후 값이 없다면 조회 된 결과를 반환합니다.
NOCYCLE : 무한루프를 방지하기 위함
PRIOR : 계층구조를 표현하기 위함
이상입니다.
오늘도 감사합니다 ^__^