본문 바로가기

study/인턴일지

[DB/ORACLE]oracle CONNECT BY 함수

회사에서 운영하는 홈페이지의 코드를 분석했다.

왠만한 쿼리문은 복잡하지 않은 이상 다 비슷하다 생각했는데 처음보는 함수가 눈에 띄었다.

connect by라는 함수였는데 

이 함수가 쓰인 부분은 데이터를 24시간을 한시간씩 쪼개서 가져올 때 쓰였다.

정확한 의미가 뭔지 몰라 찾아보니 계층구조 쿼리라는데 이 부분은 전혀 계층이랑 관련이 없는 부분이였다..

보통 CONNECT BY절을 사용하여 계층 질의에서 상위계층(부모행)과 하위계층(자식행)의 관계를 규정할 수 있다고 한다.

 

하지만 다른 용도로 사용하는 것을 더 찾아보니!

CONNECT BY LEVEL <=:변수

이 구문이 눈에 들어왔다. 실제 회사에서도 이 구문으로 코드를 작성하였는데

여기서의 connect by는 for문 역할을 하고있었다.

 

connect by

 

c언어로 생각해보면 for(int i=1;i<5;i++)의 역할을 하고있다.

 

connect by함수의 특징으로는

얼마씩 증가할지 어디서부터 시작할 지 어디까지 루프를 돌릴것인가는 변경이 가능하다고 한다.

어떻게 변경시킬 수 있느냐는 level의 값에 달려있는데

 

level을 조정하니 0.1씩 증가가 되었다. 이때 connect by level<5로 설정하였음에도 0.4까지 반복되는 것은

마지막 구문은 어디까지 반복할 것인지가 아닌 얼마나 반복할 것인가를 조정하는 부분이다.

 

level에 +10을 하니 시작하는 구간이 변경되었다.

 

 

지금까지 테스트 해본 것을 통해 level에 곱을 하면 level의 간격만큼 증감이 되는 것이고,

level에 덧셈을 하면 그 덧셈부터 시작한다는 것을 알 수 있다.

 

 

그럼 이 level을 어떻게 사용해야 24시간을 쪼갤수 있냐면

 

 

요로케하면 끝~