본문 바로가기

SAP Story

ABAP 751 CTE 구문의 이해




SAP S/4 HANA ABAP 751 이상 버전에서

CTE 가 가능해짐으로

물류 흐름, 재무 거래에 대한 대량의 데이터를 한방 SQL 로 해결할 수 있는

혁명적인 개념이 들어왔다.


따라서 거래내역 확인 및 분석을 위한 발췌 기술로


1. CTE 를 포함 New Open SQL 로 프로그램 종속적인 SQL 질의

2. ABAP CDS 를 활용한 보다 독립적이고 재사용이 가능한 파워풀한 SQL 질의

3. 질의 뿐 아니라 거래에 대한 처리를 데이터 레이에서 가능한 ABAP AMDP


그리고 전통적인 SAPGUI 방식 + 게이트웨이 서비스 ( Odata )  방식을 적용함으로써

기존의 ABAPer 와 구축 컨설턴트에겐 다소간의 공부후 바로 적용할 수 있게 하였다.


CTE 구문,원칙은 생략하고 다음 예제를 통해 멀티플 SQL 한방 처리를 확인해 보자.



 


*&---------------------------------------------------------------------*

*& Report ZR_CTE_001

*&---------------------------------------------------------------------*

*&

*&---------------------------------------------------------------------*

REPORT zr_cte_001.


START-OF-SELECTION.


* CTE Code


WITH


" Part 1 – Fetching Customer data

+customer AS (

          SELECT DISTINCT b~matnr, b~werks, b~charg, b~sobkz, b~kunnr, b~kulab

          FROM kna1 AS a

          INNER JOIN msku AS b

          ON a~kunnr = b~kunnr

          WHERE a~ktokd = 'CUST'

            AND b~kulab GT 0

),



+marc AS (

          SELECT matnr, werks, sernp

          FROM marc

          WHERE matnr IN ( SELECT

DISTINCT matnr FROM +customer )

          AND werks IN ( SELECT DISTINCT werks FROM +customer )

          AND sernp NE @space

),


" Part 2 – Fetching Material Plant Data

+mch1 AS ( " Part 3 – Fetching Batch Data

          SELECT matnr, charg, vfdat

          FROM mch1

          WHERE matnr IN

           ( SELECT DISTINCT matnr FROM +customer )

          AND charg IN ( SELECT DISTINCT charg FROM +customer )

),


" Part 4 – Fetching Equipment data

+equi AS (

          SELECT c~equnr, c~matnr, c~sernr

          FROM equi AS c

          INNER JOIN eqbs AS d

          ON c~equnr = d~equnr

          WHERE c~matnr IN ( SELECT DISTINCT matnr FROM +customer )

          AND d~b_werk IN ( SELECT DISTINCT werks FROM +customer )

          AND d~b_charge IN ( SELECT DISTINCT charg FROM +customer )

          AND d~sobkz IN ( SELECT DISTINCT sobkz FROM +customer )

          AND d~kunnr IN ( SELECT DISTINCT kunnr FROM +customer )

),


" Part 5 – combining above data

+result AS (

            SELECT cu~matnr, cu~werks, cu~charg, cu~sobkz, cu~kunnr, cu~kulab,

            ma~sernp, mc~vfdat, eq~sernr

            FROM +customer AS cu

            LEFT OUTER JOIN +marc AS ma ON cu~matnr = ma~matnr AND cu~werks = ma~werks

            LEFT OUTER JOIN +mch1 AS mc ON cu~matnr = mc~matnr AND cu~charg = mc~charg

            LEFT OUTER JOIN +equi AS eq ON cu~matnr = eq~matnr

)


" Part 6 – Preparing result

            SELECT *

            FROM +result

            ORDER BY matnr, werks, kunnr, sernr

            INTO TABLE @DATA(lt_res).




cl_demo_output=>display( lt_res ).

 


위에서 확인할 수 있는 것은

마지막 산출되는 결과셋을 획득하는 과정이 Subquery 의 연속이라는 점을 알 수 있다.

Aggregation, Calculation 이 되는 중간 과정이 데이터 지향으로 이루어져 있는 것이고 

이 방식은 수많은 Loss 를 줄이게 하여 업무 처리 효율을 향상 시킨다.


원칙적으로 단일 사용은 CTE, 복수 사용은 CDS,AMDP 를 권장하나

혼용하더라도 혁명적임을 부인하기 어렵다.


앞으로의 ERP 프로젝트를 수행하는 컨설턴트와 개발자들에겐 위 3가지 혁명적인 신기술은

반드시 사용해야하고 피해갈 수 없는 환경임에 분명하다.



- end -