본문 바로가기

ABAP 프로그래밍 개념/OPEN SQL

5. Processing Data from Databases via Internal Tables and Structures

Internal Table과 Structure는 주로 데이터베이스 테이블에서 데이터를 처리하는 데 사용됩니다.
모든 트랜잭션 데이터가 데이터베이스 테이블에 저장되기 때문에, 우리는 거의 모든 ABAP 프로그램에서 Internal Table과 Structure를 사용합니다. 여러 개의 테이블을 사용할 때는 Interna Table을 다루는 것이 처음에는 조금 까다롭게 느껴질 수 있습니다.

여러 개의 Internal Table에서 데이터를 처리할 때는 항상 중첩 루프( Nested Loop : 루프 내부에 또 다른 루프)를 피해야 합니다. 중첩 루프는 성능을 저하시키기 때문입니다. 우리는 항상 메인 테이블을 루프 돌리고 보조 테이블(Secondary Table)을 읽습니다.

여러 테이블에서 데이터를 처리해야 하는 요구사항이 있다면, 어떤 Internal Table을 루프 돌려야 하고 어떤 것을 읽어야 할지 판단하는 것이 어려울 수 있습니다. 예를 들어, 자재 및 공장 데이터를 처리해야 하는 요구사항이 있다면, 이 데이터는 데이터베이스 테이블 MARC에서 사용할 수 있습니다. 출력에서 자재의 공장 세부 정보를 출력하려면, 아래 표시된 코드를 작성하면 됩니다.

TYPES: BEGIN OF ty_marc,
        matnr TYPE matnr,
        werks TYPE werks_d,
       END OF ty_marc.
       
DATA : it_marc TYPE STANDARD TABLE OF ty_marc,
       wa_marc TYPE ty_marc.
       
PARAMETERS p_matnr TYPE matnr.
SELECT matnr werks from marc INTO TABLE it_marc WHERE matnr EQ p_matnr.

LOOP AT it_marc INTO wa_marc.
 WRITE: / wa_marc-matnr, wa_marc-werks.
ENDLOOP.

이제  코드를 확장하여 모든 공장 번호에 대해 세 번째 열로 공장에 대한 Description을 출력해야 할 경우, 다른 테이블 T001W에서 Description을 선택하고 테이블 MARC의 공장 데이터와 비교하여 가져와야 합니다. 아래에 표시된 대로 작성하면 됩니다.

TYPES: BEGIN OF ty_marc,
        matnr TYPE matnr,
        werks TYPE werks_d,
       END OF ty_marc.
       
TYPES : BEGIN OF ty_t001w,
        Werks TYPE werks_d,
        Name1 TYPE name1,
       END OF ty_t001w.
DATA : it_marc TYPE STANDARD TABLE OF ty_marc,
       wa_marc TYPE ty_marc,
       it_t001w TYPE STANDARD TABLE OF ty_t001w,
       wa_t001w TYPE ty_t001w.
       
PARAMETERS p_matnr TYPE matnr.
SELECT matnr werks 
  from marc 
  INTO TABLE it_marc 
  WHERE matnr EQ p_matnr.

IF sy-subrc IS INITIAL.
 SELECT werks name1 
   FROM t001w 
   INTO TABLE it_t001w 
   FOR ALL ENTRIES IN it_marc 
   WHERE werks EQ it_marc-werks.
ENDIF.

LOOP AT it_marc INTO wa_marc.
 READ TABLE it_t001w INTO wa_t001w WITH KEY werks = wa_marc-werks.
  WRITE: / wa_marc-matnr, wa_marc-werks, wa_t001w-name1.
ENDLOOP.

위 예시에서 볼 수 있듯이, 첫 번째 테이블의 항목을 두 번째 테이블과 일치시켜 두 개의 Internal Table에서 각각 필요한 정보를 선택했습니다. 각 Internal Table에서 데이터를 선택한 후, 우리는 한 테이블을 루프 돌리고 다른 테이블을 루프 내에서 읽어 출력합니다.

이제 어떤 테이블을 루프 돌려야 하고 어떤 테이블을 읽어야 할지 결정하는 방법은 무엇일까요? 

많은 개발 초보자들이 혼란스러워하지만, 답은 간단합니다.

주 데이터가 있는 테이블을 루프 돌리고, 부 데이터가 있는 테이블을 읽으십시오. 위 예시에서, 우리가 출력하는 주 데이터는 자재의 공장 정보이고, 공장에 대한 Description은 부 데이터입니다. 따라서, 우리는 메인 테이블인 MARC를 루프 돌리고, 보조 테이블인 T001W를 읽습니다.

반응형

'ABAP 프로그래밍 개념 > OPEN SQL' 카테고리의 다른 글

Numeric Function  (0) 2023.08.05
OPEN SQL의 사용  (0) 2023.08.05
4. Selecting Data from Multiple Tables  (0) 2023.05.04
3. Selecting Data from Database Tables  (0) 2023.05.04
2.5 Normalization  (0) 2023.05.03