CONTENTS: [Syntax] WITH 구문 활용 가이드
1. WITH 구문의 정의 및 아키텍처
SAP ABAP의 New SQL 문법인 WITH 구문은 SQL 표준의 CTE(Common Table Expression)를 기반으로 합니다. 이는 하나 이상의 임시 결과 집합(Temporary Result Set)을 정의한 후, 이를 메인 쿼리에서 참조하여 사용하는 방식입니다.
특히 S/4HANA 및 HANA DB 환경에서는 대용량 데이터를 처리할 때 쿼리의 가독성을 높이고 로직을 논리적으로 분리함으로써, 유지보수 효율성을 비약적으로 향상시킵니다. 중첩된 서브쿼리(Subquery)를 절차적인 형태로 구현할 수 있다는 점이 핵심입니다.
2. 주요 장점 및 필요성
- 가독성 극대화: 복잡한 Join 및 Union 로직을 단계별로 정의하여 쿼리 흐름을 명확하게 파악할 수 있습니다.
- 코드 재사용성: 정의된 임시 테이블을 메인 쿼리 내에서 여러 번 참조하여 중복 로직을 제거합니다.
- HANA 엔진 최적화: 데이터베이스 옵티마이저가 논리적 구조를 정확히 인지하여 최적의 실행 계획을 수립하도록 지원합니다.
3. 실무 적용 코드 예시 (Copy & Paste 가능)
다음은 판매 오더(SO) 헤더와 아이템 데이터를 집계하여, 총 금액이 특정 기준을 초과하는 대상을 추출하는 실무형 코드입니다..
" S/4HANA 2022 ABAP WITH 구문 활용 실무 예제
REPORT zr_with_syntax_demo.
" 1. 임시 결과 집합(+so_items) 정의 및 메인 쿼리 실행
WITH
+so_items AS (
SELECT vbeln,
SUM( netwr ) AS total_amount,
waerk
FROM vbap
GROUP BY vbeln, waerk
)
SELECT FROM vbak AS h
INNER JOIN +so_items AS i ON h~vbeln = i~vbeln
FIELDS h~vbeln,
h~erdat,
h~kunnr,
i~total_amount,
i~waerk
WHERE i~total_amount > 50000
INTO TABLE @DATA(lt_target_orders).
" 2. 실행 결과 처리
IF sy-subrc = 0.
cl_demo_output=>display( lt_target_orders ).
ENDIF.
#SAP #ABAP #NewSyntax #WITH #CTE #HANA #S4HANA2022 #ABAP_Cloud
4. 사용 시 기술적 주의사항
WITH 구문 도입 시 반드시 준수해야 할 문법적 제약 사항은 다음과 같습니다.
- 임시 테이블 식별자 앞에는 반드시 플러스(+) 기호를 접두어로 명시해야 합니다.
- 정의된 모든 임시 테이블은 메인 쿼리에서 최소 1회 이상 참조되어야 하며, 참조되지 않을 경우 구문 오류가 발생합니다.
- 마침표(.)는 오직 전체 문장의 끝(Main Query 종료 지점)에만 사용해야 합니다.
- 복잡한 로직일수록 CTE를 적절히 분할하여 DB 옵티마이저의 부하를 최소화할 것을 권장합니다.
마치며
S/4HANA 개발 환경에서 WITH 구문은 현대적인 ABAP 코딩의 표준으로 자리 잡고 있습니다. 기존의 복잡한 서브쿼리를 CTE로 리팩토링함으로써 클린 코어(Clean Core)를 유지하고 고성능 HANA DB의 이점을 극대화하시기 바랍니다.