-
AMDP에서 WITH 구문(CTE) 활용하기SAP 2026. 5. 13. 18:29
AMDP에서 WITH 구문(CTE) 활용하기 AMDP에서 WITH 구문(CTE) 활용하기
1. 핵심 결론
AMDP에서 WITH 구문(CTE)을 사용할 수 있는가?네, WITH 구문은 AMDP에서 정상적으로 사용 가능합니다. 정적 SQLScript는 물론, 동적 SQL 형태에서도 동작합니다. 대부분의 경우 정적 WITH 한 줄이면 충분합니다.
2. 정적 WITH (가장 일반적·권장)
export 파라미터(
et_result)에 결과를 바로 담을 수 있어 가장 깔끔한 패턴입니다.METHOD get_data BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING ztab. et_result = WITH cte AS ( SELECT bukrs, SUM(amount) AS amt FROM ztab WHERE mandt = :sy-mandt GROUP BY bukrs ) SELECT * FROM cte WHERE amt > 1000; ENDMETHOD.3. WHERE 조건만 동적인 경우 — APPLY_FILTER
WITH 구문은 정적으로 두고 필터 조건만 문자열로 전달합니다. AMDP 제약 안에서 가장 안전하게 동적 WHERE를 구현하는 방법입니다.
lt_base = WITH cte AS ( SELECT bukrs, gjahr, SUM(amount) AS amt FROM ztab WHERE mandt = :sy-mandt GROUP BY bukrs, gjahr ) SELECT * FROM cte; et_result = APPLY_FILTER( :lt_base, :iv_filter );iv_filter예시:'bukrs = ''1000'' AND amt > 1000'4. 분기 패턴이 한정된 경우 — IF / CASE
SELECT 컬럼이나 WHERE 구조 자체가 몇 가지 패턴으로 바뀌는 경우, 분기로 푸는 것이 안전합니다.
IF :iv_mode = 'A' THEN et_result = WITH cte AS ( SELECT ... ) SELECT * FROM cte WHERE ...; ELSEIF :iv_mode = 'B' THEN et_result = WITH cte AS ( SELECT ... ) SELECT * FROM cte WHERE ...; END IF;5. 의사결정 가이드
동적으로 바뀌어야 하는 것 권장 패턴 없음 (모든 것이 정적) 정적 WITH WHERE 조건 값 APPLY_FILTER WHERE 구조나 SELECT 컬럼 IF / CASE 분기 6. 정리
- AMDP에서 WITH 구문(CTE)은 그대로 사용 가능
- 정적 WITH → export 파라미터에 바로 할당 가능 (1순위)
- WHERE만 동적 → APPLY_FILTER 활용
- 패턴이 정해진 동적 → IF / CASE 분기
💡 대부분의 경우 정적 WITH 한 줄이면 해결됩니다. 동적이 정말 필요한지 먼저 검토하세요.⚠️ APPLY_FILTER 인자로 들어가는 문자열은 외부 입력을 그대로 받지 말고 화이트리스트 검증 후 사용해야 SQL Injection 위험을 피할 수 있습니다.'SAP' 카테고리의 다른 글
AMDP SQLScript 날짜·시간 함수 (0) 2026.05.14 SAP STRING 타입 필드 — CDS / AMDP 처리 가이드 (0) 2026.05.13 AMDP SQLScript — Consumption Entity & Table Function 정리 (0) 2026.05.13 SAP ABAP 호출 구조 정리 — Entity · Query Provider · AMDP (0) 2026.05.12 CDS Consumption Entity 어노테이션 정리 (0) 2026.05.12