반응형

 

CTE ( Common Table Expression, 공통 테이블 ) 단일 명령문의 범위 내에 존재하는 명명된 임시 결과 집합이다.

 

이러한 공통 테이블 표현식을 지정하기 위해서 사용되는게 WITH구문이다.

 

CTE 이름은 다른 CTE에서 참조할 있으므로 CTE 다른 CTE 기반으로 정의 있다.

 

또한, CTE 자신을 참조하여 재귀 CTE 정의할 있다.

 

이러한 이유로 복잡한 쿼리를 단순하게 정의 있어 가독성을 높이고 중복을 제거하는데 도움이 된다.

 

WITH구문 사용하는 방법은 다음과 같다.

 

 

WITH +(NAME) AS (

SELECT 쿼리

             ),

 +(NAME) AS (

SELECT 쿼리

 ),

+(NAME) AS (

SELECT 쿼리

)

메인 SELECT 쿼리

 

Name 길이는 최대 30 까지 가능하기에 이름만으로 추론할 있도록 이름으로 설정할 있다.

   또한, 이름앞에 반드시 '+' 기호를 사용해야 한다.

 

다음과 같이 항공편 테이블이 있다고 , WITH구문을 이용하여 데이터를 추출해보자.

 

 

다음과 같이 2개의 임시 View 생성한다.

 

첫번째 (+main_spfli) 메인 테이블 도착이 배정안되어 있는 곳은 제외한 데이터

두번째 (+airline) 메인 테이블에서 항공사, 출발나라 , 거리단위 같은 항목끼리 Group by 하여 운항 거리를 합한 데이터

 

 

이렇게 임시의 View 만들어 Inner Join 통하여 두개의 데이터를 가공할 있다.

 

예시로 2개의 (View 만들었지만, 실제로는 여러 개를 만들 있으며 만들었으면 무조건 사용은 해야한다.

 

실행 결과) 항공사별 출발지가 같은 곳의 최종 거리가 추가된 것을 확인 있다.

 

 

1개의 View 만들 안에서도 Join이나 Union 모두 사용가능 하기에 복잡한 데이터를 가공하기에 매우 유용하게 사용할 있다.

 

ABAP에서 CDS View 이용하여 쿼리를 많이 짜는 방향으로 바꼈는데 WITH 구문을 사용하여 가독성을 높여보자.

 

복잡한 쿼리인 경우 SELECT문이 길어지면서 가독성이 떨어지는데 WITH구문으로 VIEW 이름을

 

용도에 맞게 나눠서 만들기에 가독성이 매우 높아지기 때문에 유지보수에도 도움이 것이다.

 

또한, WITH구문은 본절에서 1 사용될 때는 서브쿼리와 성능차이가 보이지 않지만,

 

WITH구문으로 정의된 테이블이 2번이상 사용될 때에는 내부적으로 메모리에 쿼리의 결과값을 저장하고 반복하여 사용하는 방식으로

 

저장된 결과값을 불러와 실행 수를 줄여주기 때문에 성능의 개선이 있다.

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] SMW0를 이용한 Excel 다운로드  (1) 2024.09.09
[ABAP] Subtotal(소계) 세팅  (1) 2024.09.02
[ABAP] Pass by Value vs Pass by Reference  (1) 2024.06.16
[ABAP] ALV Grid Event Handler - 2편  (0) 2024.06.11
[ABAP] ALV Grid Event Handler - 1편  (0) 2024.06.10

+ Recent posts