[ABAP] JOIN (HANA Version)과 For All Entries (ECC Version) 비교

J._NA 개발일지·2024년 9월 8일

HANA Version

*  SELECT A~VBELN,
*         A~VKORG,
*         B~VTEXT,
*         A~SPART,
*         A~VTWEG,
*         A~KUNNR,
*         C~VTEXT AS STEXT,
*         D~NAME1
*    FROM VBAK AS A LEFT OUTER JOIN TVKOT AS  B
*                                         ON  B~SPRAS = @SY-LANGU      " SPRAS 필드 존재 시 반드시 넣어줘야한다. SY-LANGU
*                                         AND B~VKORG = A~VKORG
*                   LEFT OUTER JOIN TSPAT AS  C
*                                         ON  C~SPRAS = @SY-LANGU
*                                         AND C~SPART = A~SPART
*                   LEFT OUTER JOIN KNA1  AS  D
*                                         ON  D~SPRAS = @SY-LANGU
*                                         AND D~KUNNR = A~KUNNR
*    UP TO 5 ROWS
*    INTO CORRESPONDING FIELDS OF TABLE @GT_LIST.

ECC Version

DATA : LT_TVKOT  TYPE TABLE OF TVKOT,
       LT_TSPAT  TYPE TABLE OF TSPAT.

DATA : BEGIN OF LS_KNA1,
         KUNNR  TYPE  KNA1-KUNNR,
         NAME1  TYPE  KNA1-NAME1,
       END OF LS_KNA1,

       LT_KNA1 LIKE TABLE OF LS_KNA1.

DATA : LT_TEMP LIKE TABLE OF LS_HEADER.

SELECT A~VBELN,
       A~VKORG,
       A~SPART,
       A~VTWEG,
       A~KUNNR
  FROM VBAK AS A
  INTO CORRESPONDING FIELDS OF TABLE @GT_LIST.

  " 1. ITAB 값 존재 여부(NOT INITIAL)
  " 2. 중복 제거
  IF GT_LIST[] IS NOT INITIAL.

    " 1. VKORG의 Description -> LT_TVKOT에 담아둠
    LT_TEMP[] = GT_LIST[].

    SORT LT_TEMP[] BY VKORG.
    DELETE ADJACENT DUPLICATES FROM LT_TEMP[] COMPARING VKORG.

    SELECT B~VKORG,
           B~VTEXT
      FROM TVKOT AS B
      FOR ALL ENTRIES IN @LT_TEMP
     WHERE B~SPRAS = @SY-LANGU
       AND B~VKORG = @LT_TEMP-VKORG
      INTO CORRESPONDING FIELDS OF TABLE @LT_TVKOT.

    " 2. SPART의 Description -> LT_TSPAT에 담아둠, CLEAR 하는 이유는 테이블에 잔여 데이터가 남아 있는지 확인하려고.
    CLEAR : LT_TEMP[].
    LT_TEMP[] = GT_LIST[].

    SORT LT_TEMP[] BY SPART.
    DELETE ADJACENT DUPLICATES FROM LT_TEMP[] COMPARING SPART.

    SELECT A~SPART,
           A~VTEXT
      FROM TSPAT AS A
      FOR ALL ENTRIES IN @LT_TEMP
     WHERE A~SPRAS = @SY-LANGU
       AND A~SPART = @LT_TEMP-SPART
      INTO CORRESPONDING FIELDS OF TABLE @LT_TSPAT.

    " 3. KUNNR의 NAME1 -> LT_KNA1
    CLEAR : LT_TEMP[].
    LT_TEMP[] = GT_LIST[].

    SORT LT_TEMP[] BY KUNNR.
    DELETE ADJACENT DUPLICATES FROM LT_TEMP[] COMPARING KUNNR.

    SELECT A~KUNNR,
           A~NAME1
      FROM KNA1 AS A
      FOR ALL ENTRIES IN @LT_TEMP
     WHERE A~KUNNR = @LT_TEMP-KUNNR
      INTO CORRESPONDING FIELDS OF TABLE @LT_KNA1.

HANA VERSION
-> MEMORY DB이기에 DB 성능도 많이 좋아져서 DB에서 가급적 처리해서 모든걸 진행하려는 방식

FOR ALL ENTRIES (ECC VERSION)
-> 위 구문을 쓸 당시에는 DB성능이 안좋았음. JOIN 갯수의 제약도 존재했음.
APPLICATION MEMORY에 데이터를 조회새서 올려두고 거기서 찾아서 대입하는 방식.

profile
아밥 & 프론트엔드 개발자

0개의 댓글