웅겹살의 프로그래밍 삼매경

[ABAP] SAP ERP 인터널테이블 internal table 정리 본문

SAP Abap

[ABAP] SAP ERP 인터널테이블 internal table 정리

웅겹사r☆ 2025. 3. 12. 13:37
728x90

 

 

ABAP Internal Table: 헤더라인 여부, 선언 방법 및 활용 방법

ABAP에서 내부 테이블(Internal Table)은 데이터를 임시로 저장하고 조작하는 데 사용하는 중요한 개념이다. 내부 테이블에는 헤더 라인이 있는 것과 없는 것이 있으며, 각각의 특징과 활용 방법이 다르다. 이 글에서는 내부 테이블의 선언 방식, 활용법, 그리고 PERFORM을 활용한 실전 예제를 포함하여 설명하겠다.


1. 내부 테이블(Internal Table) 개요

내부 테이블은 ABAP 프로그램에서 데이터를 다루기 위한 일종의 배열이며, 데이터베이스 테이블과 유사한 구조를 가질 수 있다. 내부 테이블의 데이터는 프로그램 실행 중에만 유지되며, 종료되면 사라진다.

내부 테이블은 크게 두 가지 유형으로 나눌 수 있다.

  1. 헤더 라인이 있는 내부 테이블
  2. 헤더 라인이 없는 내부 테이블

2. 헤더 라인이 있는 내부 테이블 vs 없는 내부 테이블

2.1 헤더 라인이 있는 내부 테이블

헤더 라인이 있는 내부 테이블은 데이터 행을 저장하는 본체(body)와 데이터를 읽고 쓰기 위한 헤더(work area)가 결합된 형태이다.

선언 방법:

DATA: itab TYPE TABLE OF spfli WITH HEADER LINE.

특징:

  • itab 자체가 내부 테이블과 워크 영역(Work Area)의 역할을 동시에 수행한다.
  • 데이터를 추가하거나 수정할 때 명시적인 워크 영역을 지정할 필요가 없다.
  • itab 자체에 필드 값을 직접 할당할 수 있다.

활용 예제:

itab-carrid = 'LH'.
itab-connid = '400'.
APPEND itab.

2.2 헤더 라인이 없는 내부 테이블

헤더 라인이 없는 내부 테이블은 데이터 행을 저장하는 본체만 포함하고 있으며, 데이터를 다루려면 별도의 워크 영역을 사용해야 한다.

선언 방법:

DATA: itab TYPE TABLE OF spfli.
DATA: wa TYPE spfli.

특징:

  • itab은 오직 데이터 저장을 위한 테이블로만 동작한다.
  • 데이터를 삽입하거나 조작하려면 별도의 워크 영역(wa)을 사용해야 한다.
  • 가독성과 유지보수성이 높아, 최근에는 헤더 없는 내부 테이블이 권장된다.

활용 예제:

wa-carrid = 'LH'.
wa-connid = '400'.
APPEND wwaTO itab.

3. 내부 테이블 선언 및 활용

내부 테이블은 DATA 문을 사용하여 선언할 수 있으며, BEGIN OF를 사용하여 테이블 필드를 정의할 수 있다.

내부 테이블 선언 예제:

DATA: BEGIN OF itab01 OCCURS 0,
      name LIKE ZCUSTOMERS1-name,
      dob LIKE ZCUSTOMERS1-dob,
END OF itab01.

또한, 로컬 데이터 타입을 정의하여 내부 테이블을 생성할 수도 있다.

TYPES: BEGIN OF CustomerLine,
       Cust_ID TYPE C,
       Cust_Name(20) TYPE C,
       END OF CustomerLine.

TYPES mytable TYPE SORTED TABLE OF CustomerLine WITH UNIQUE KEY Cust_ID.

위의 코드는 정렬된 내부 테이블을 생성하는 예제이다.


4. 내부 테이블 데이터 조작

4.1 데이터 추가 (INSERT, APPEND)

INSERT 문을 사용한 예제:

REPORT ZCUSLIST1.
DATA: BEGIN OF itable1 OCCURS 4,
      F1 LIKE SY-INDEX,
      END OF itable1.

DO 4 TIMES.
  itable1-F1 = sy-index.
  APPEND itable1.
ENDDO.

itable1-F1 = -96.  
INSERT itable1 INDEX 2.  

LOOP AT itable1.
   WRITE: / itable1-F1.  
ENDLOOP.

위 코드에서 INSERT 문을 사용하여 특정 위치에 데이터를 삽입하고 있다.

APPEND 문을 사용한 예제:

DATA: BEGIN OF linv OCCURS 0,
      Name(20) TYPE C,
      ID_Number TYPE I,
END OF linv.

DATA table1 LIKE TABLE OF linv.
linv-Name = 'Melissa'.
linv-ID_Number = 105467.
APPEND linv TO table1.

4.2 데이터 이동 (MOVE, MOVE-CORRESPONDING)

MOVE 문을 사용한 예제:

MOVE ZCUSTOMERS1-name TO itab01-name.
MOVE ZCUSTOMERS1-dob TO itab01-dob.

MOVE-CORRESPONDING 문을 사용한 예제:

MOVE-CORRESPONDING ZCUSTOMERS1 TO itab01.
APPEND itab01.

이 구문을 사용하면 동일한 필드명을 가진 데이터를 한번에 매핑할 수 있다.


4.3 데이터 조회 (READ TABLE)

READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ.
WRITE: 'SY-SUBRC =', SY-SUBRC.

READ TABLE 문을 사용하여 내부 테이블에서 특정 조건을 만족하는 데이터를 검색할 수 있다.


4.4 데이터 삭제 (DELETE)

DELETE TABLE mytable WITH TABLE KEY ColP = 3.

이 코드는 ColP = 3 인 행을 삭제하는 예제이다.


5. 내부 테이블 활용: PERFORM을 이용한 데이터 조회 및 처리

내부 테이블은 데이터베이스에서 데이터를 가져와 가공하는 데 자주 사용된다. 아래는 PERFORM을 사용하여 내부 테이블을 활용하는 예제이다.

REPORT zinternal_table_demo.

DATA: itab TYPE TABLE OF spfli,
      wa   TYPE spfli.

START-OF-SELECTION.
  PERFORM fetch_data.
  PERFORM display_data.

FORM fetch_data.
  SELECT * FROM spfli INTO TABLE itab.
ENDFORM.

FORM display_data.
  LOOP AT itab INTO wa.
    WRITE: / wa-carrid, wa-connid, wa-cityfrom, wa-cityto.
  ENDLOOP.
ENDFORM.

6. 마무리

ABAP에서 내부 테이블을 적절하게 활용하면 성능 최적화와 코드 가독성 향상에 도움이 된다. 다양한 방식으로 내부 테이블을 활용해 보면서 더욱 익숙해지길 바란다.

 

728x90
Comments