"Internal Table은 프로그램 내에서 정의하여 사용할 수 있는 Local Table이다."


Struture비교

# c언어에서의 구조체 선언

STRUCT s_type

{
    CHAR no[6];

    CHAR name[8];

    CHAR part[16];

};

STRUCT s_type sawon.


#ABAP에서의 구조체 선언

TYPES : BEGIN OF s_type,

NO(6) TYPE C,

NAME(8) TYPE C,

PART(16) TYPE C,

END OF s_type.

DATA sawon TYPE s_type. 

================================

Structure(구조체) 배열과 Internal Table

#C언어에서의 구조체 배열 선언

STRUCT sawon

{
    char NO[6];

    char NAME[8];

    char part[16];

};

STRUCT s_type sawon[100]


#ABAP에서의 Internal Table 선언

TYPES : BEGIN OF s_type,

NO(6) TYPE C,

NAME(8) TYPE C,

PART(16) TYPE C,

END OF s_type.


TYPES t_type TYPE STANDARD TABLE OF  s_type.

DATA sawon TYPE t_type INITIAL SIZE 100.

(s_type이라는 구조체 생성-> s_type을 타입으로하는 internale table 타입 정의-> t_type을 타입으로하는 sawon 테이블 선언)

=================================================================================================

*C언어에서의 배열을 선언할 때 미리 크기를 지정하는 반면, Internal Table은 INITIAL SIZE 구문으로 테이블 크기만 선언할 뿐 미리 메모리에 Load하지 않는다. 따라서 APPEND구문을 사용하여 Line이 추가될 때마다 메모리에 Load 해야 한다. 이러한 측면에서 Internal Table을 동적인 구조체 배열이라고 정의.

*Internal Table은 항상 할당과 추가구문이 쌍으로 움직여야 함.

=================================================================================================

[Internal Table 생성]

: 구조체 타입을 정의한 후 그 타입을 참고하여 생성하는 것이 일반적

# Local Table Type : 프로그램 내에서 Local Table Type을 생성하여, Internal Table 생성 시 참고

# lmplicit Table Type : ABAP Dictionary Table을 참고하여 Internal Table을 생성

# Global Table Type : ABAP Dictionary Table Type을 참고하여 Internal Table을 생성

=================================================================================================

[Internal Table의 라인 Type]

#Line Type

#Key

: Internal Table의 Row를 구분. Standard, User-defined Key 두 가지의 테이블 키가 존재.

: 키값은 Unique, Non-unique 하게 정의(Unique Key를 가지는 경우 중복된 값을 APPEND 할 수 없다.)

==================================================================================================

[Table Type]

Table 종류

#Standard Table

: 순차적인 인덱스를 가지는 테이블.

: Index를 이용하여 테이블 Entry를 찾을 때 가장 바람직한 테이블 구조.

: 키는 항상 Non-unique로 선언하여야 한다.


#Sorted Table

: Index 테이블

: 항상 정렬된 테이블

: Unique / Non-unique를 반드시 명시


#Hashed Table

: Index (x)

: hash 값으로 계산된 Key 값으로만 탐색

: 반드시 Unique하게 선언되어야 한다.

================================================================================================

[Header Line]

= Work Area.

= Internal Table 선언 시 WITH HEADER LINE 구문을 추가하면 생성

= Internal Table을 LOOP 처리하면서 개별 Line이 Header Line으로 옮겨 가는 과정.


#헤더라인을 선언한 경우

ex) LOOP AT itab

WRITE : ITAB-RCEPNO.

    ENDLOOP.

ex) READ TABLE itab INDEX 2 // 2번째 라인이 헤더 라인으로 올라옴

#헤더라인을 선언하지 않은경우

ex)LOOP AT itab INTO work_area.

WRITE : work_area-carrid.

   ENDLOOP.

ex) READ TABLE itab INDEX 2 INTO work_area // 정보를 옮긴후 사용

================================================================================================

ex) 헤더 라인이 존재하는 Internal Table 예제

REPORT Z07_001.


//line구조체생성

TYPES : BEGIN OF line,

col1 TYPE I,

col2 TYPE I,

END OF line.


//line구조체를 타입으로하는 HASHED TABLE itab 선언 ( 유니크 키는 col1, 헤더라인 사용)

DATA itab TYPE HASHED TABLE OF line WITH UNIQUE KEY col1 WITH HEADER LINE.


//4번의 반복 col1(index번호) col2(index번호의 제곱) , itab에 삽입

DO 4 TIMES.

itab-col1 = sy-index.

itab-col2 = sy-index ** 2.

INSERT Table itab.

ENDDO.


//col1변수가 2인 라인을 읽음

itab-col1 = 2.

READ TABLE itab FROM itab.


//col2변수를 100으로 수정

itab-col2 = 100.

MODIFY TABLE itab.


//col1변수가 4인 라인은 지움

itab-col1 = 4.

DELETE TABLE itab.


//루프를 돌려 출력

LOOP AT itab.

WRITE : / itab-col1, itab-col2.

ENDLOOP.

===============================================================================================

ex) Header Line을 사용하지 않는 경우 예제

REORT Z07_005.


TYPES : BEGIN OF line,

col1 TYPE I,

col2 TYPE I,

END OF  line,


DATA itab TYPE HASHED TABLE OF line WIHT UNIQUE KEY col1.

//Work Area 생성

DATA wa LIKE LINE OF itab.


DO 4 TIMES.

wa-col1 = sy-index.

wa-col2 = sy-index ** 2.

INSERT wa INTO TABLE itab. // Work Area에 삽입하고 itab으로 옮김

ENDDO.


wa-col1 = 2.

READ TABLE itab FROM wa INTO wa. // itab에 wa으로 col1변수가 2인것을 wa로 옮겨 읽음


wa-col2 = 100.

MODIFY TABLE itab FROM wa. // wa로부터 itab을 col2변수를 변경


wa-col1 = 4.

DELETE TABLE itab FROM wa. // wa로부터 col4인 것을 table에서 찾아 삭제


LOOP AT itab INTO wa.

WRITE : / wa-col1, wa-col2.

ENDLOOP


+ Recent posts