본문 바로가기

IT/SAP

[SAP/ABAP] Internal Table 선언

https://moseory20.tistory.com/48

https://potato98.tistory.com/70

 

SAP Workarea vs Structure AND Internal Table vs Trasnparent Table 정리

알아보기 전 어떻게 하면 최대한 쉽게 이해하고 생각할 수 있는지 쓴 블로그이다. 자세한 내용은 넘어가고 최대한 쉽게 쓸려는 글입니다! 예제도 있으니 참고 바람. Transparent Table vs Internal Table에

potato98.tistory.com

 

ABAP 개발을 하다보니, Internal Table을 선언하는 문법(구문, 방식)을 다양하게 접하며 헷갈리기 시작했다.
그래서 크게 2가지의 경우로 정리해보았다.

  1. 실제 DB 기반 Internal Table 선언
  2. 개발자가 필요한 컬럼들로 구성한 Internal Table 선언

먼저 Internal Table의 기본 정의와 종류에 대해서 설명한 후 선언 방식을 정리하였다.

- Internal Table 이란?

DB의 데이터에 접근 및 조작할 때, Local 메모리 영역에 담아두어 사용하는 것
매번 DB에 직접적으로 접근하지 않아도 되어 부하를 줄일 수 있다.

- Internal Table 종류

  • Standard Table 
    : 순차적으로 Index를 가지는 테이블로 Index로 조작할 수 있다.
      Key는 항상 non-unique
  • Sorted Table
    : Key로 자동 정렬되며 Index와 Key로 조작할 수 있다. 
      Key에 WITH UNIQUE 사용 가능
      SORT 명령어 사용 불가능
      INSERT는 사용 가능하나 APPEND는 불가능
  • Hashed Table
    : Index가 없어서 READ TABLE ~ INDEX 구문 사용 불가능
      Hash로 계산된 Key값으로 조회할 수 있어, READ TABLE ~ WITH [TABLE] KEY 구문 사용 가능
      반드시 Unique하게 선언되어야 한다.

- 실제 DB 기반 Internal Table 선언

#1
(internal) LIKE TABLE OF (DB) WITH HEADER LINE.
#2
(internal) LIKE (DB) OCCURS 0 WITH HEADER LINE.
  • LIKE TABLE OF 과 OCCURS 0 동시 사용 불가능
    : OCCURS 0 -> 메모리 제한을 두지 않겠다는 것(무한대)
  • WITH HEADER LINE 
    : Header(Work Area)를 생성할 때 사용하며, 대부분 사용하는 것이 더 편하다.

    # WITH HEADER LINE 사용하는 경우(가공 필요X)
    LOOP AT (internal) ~ ENDLOOP.
    # LOOP를 돌면서 Header가 자동으로 올라와서 반복문 바로 수행

    # WITH HEADER LINE 사용하지 않는 경우(가공 필요O)
    LOOP AT (internal) INTO (struct) ~ ENDLOOP.
    # LOOP를 돌면서 한 line씩 structure에 넣어서 반복문 수행

 

- 개발자가 필요한 컬럼들로 구성한 Internal Table 선언

 

TYPES : BEGIN OF t_emp
  no type zemplist-empcd,
  name type zemtplist-ename,
END OF t_emp.

#structure 둘다 가능
DATA: GS_EMP TYPE T_EMP.
DATA: GS_EMP LIKE LINE OF GT_EMP

# iT
DATA : GT_EMP TYPE OF TABLE OF t_emp with header line.

타입을 쓰던가 data gs로 하던가 큰 상관은 없음(데이터 차지 차이)
#1
DATA : BEGIN OF (struct),
              (val1) LIKE (table1-val1),
              (val2) LIKE (table2-val2),
          ENDOF (struct),
      
(internal) LIKE TABLE OF (struct) [WITH HEADER LINE].

 

#2
DATA : BEGIN OF (struct),
              (val1) LIKE (table1-val1),
              (val2) LIKE (table2-val2),
         ENDOF (struct),
       
 (internal) LIKE (struct) OCCURS 0 [WITH HEADER LINE].
  • #1, #2 : structure를 생성 후 위의 <실제 DB 기반 Internal Table 선언>과 같이 internal table 선언
#3
DATA : BEGIN OF (internal) OCCURS 0,
              (val1) LIKE (table1-val1),
              (val2) LIKE (table2-val2),
         ENDOF (internal),
  • structure와 internal table 구분하지 않고 선언하는 방식으로, 테이블 구조 선언 부에 OCCURS 0 을 사용한다.

피오리에서는 Headerline을 안쓰는게 권고, 근데 운영상 쓰면 적절히 활용