개념 :

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

ABAP프로그램 내에서 데이터를 임시로 저장하고 처리하기 위한 메모리 테이블이다. = 여러행의 데이터를 담는 배열 구조.

C언어의 구조체+배열을 합쳐놓은 개념과 비슷하다 

 

struct Flight {
    char carrid[3];
    int connid;
    float price;
};

struct Flight flightList[100]; // 구조체 배열

- Flight 는 하나의 행구조 (=work Area)

- FlightLIST는 여러 행을 담는 배열 (= InternalTable)

TYPES: BEGIN OF ty_flight,
         carrid TYPE sflight-carrid,
         connid TYPE sflight-connid,
         price  TYPE sflight-price,
       END OF ty_flight.

DATA: gt_flight TYPE STANDARD TABLE OF ty_flight, " Internal Table (구조체 배열)
      gs_flight TYPE ty_flight.

- ty_flight는 C의 Struct와 같고,

- gt_flight는 struct배열,

- gs_flight 는 struct 하나와 같다. 

* 물론 C언어의 구조체는 고정 크기이기 때문에 정적이라는 것과 ABAP Internal table은 크기가 유동적이라 동적이라는 차이점이 있다.

- 메모리 관리 또한 C언어는 개발자가 malloc해제를 해줘야하지만, ABAP 인터널 테이블은 garbage collection이 없는관계로 자동 처리가 된다. 

구분C 언어 구조체+배열ABAP Internal Table

구문 C언어  ABAP언어
선언 방식 정적 (고정 크기)
STRUCT 구조체[건수] {};
동적 (크기 유동적)
DATA 테이블명 TYPE 테이블 타입.
INITIAL SIZE 건수.
값 할당
flight[1].name = 'Korea',
flight[2].name = 'Asiana'

flight-name = 'Korea'.
APPEND flight.
flight-name = 'Asiana'.
APPEND flight.
값사용 PRINTF( flight[1].name )
PRINTF( flight[2].name )
LOOP AT flight.
   WRITE flight-name.
ENDLOOP.

 

- Internal Table은 동적인 구조체 배열이다.

- Initial size 구문은 실제로 메모리 공간을 할당하는 것이 아닌, 예약 Reserve를 한다.

- 아밥에서는 할당과 추가구문이 쌍으로 움직여야한다.

 

Internal Table생성 

- 인터널 테이블은 구조체 타입을 정의하고 나서 그 타입을 참고하여 생성하는 것이 일반적이다.

- Local Table Type을 이용한 인터널 테이블 생성

- Global ABAP Dictionary TYPE을 이용한 인터널 테이블 생성

 

Local Table TYPE을 이용한 인터널 테이블 생성

TYPES : BEGIN OF t_str,
	~~~
    	END of t_str.

 

TYPES t_itab TYPE STANDARD TABLE OF t_str
	WITH {UNIQUE | NON-UNIQUE} KEY <keys> 
    INITIAL SIZE 100.

 

 

DATA:  gt_itab TYPE t_itab
	[WITH HEADER LINE].

 

 

TYPES: BEGIN OF s_type,
	no(6) TYPE c,
    name(10) TYPE c,
    part(16) TYPE c,
    END OF s_type.
    
 DATA gt_itab TYPE STANDARD TABLE OF s_type WITH NON-UNIQUE KEY no WITH HEADER LINE.
 gt_itab-no = '0001'.
 gt_itab-name = 'Easy ABAP'.
 gt_itab-part = 'SAP'.
 APPEND gt_itab.
 
LOOP AT gt_itab.
 	WRITE: gt_itab-no, gt_itab-name,  gt_itab-part.
ENDLOOP.

 

 

=> 0001 EASY ABAP SAP TEAM

 

 

DATA: BEGIN OF gs_type,
	no(6) TYPE C,
    name(10) TYPE C,
    part(16) TYPE c,
   END OF gs_type.
   
DATA gt_itab LIKE STANDARD TABLE OF gs_type WITH NON-UNIQUE KEY no with header line.

 

- 실제 gt-_itab처럼 선언된 내부 테이블을 다른 변수에서 그대로 재사용하려면 TYPE보다는 LIKE를 많이 씀.=> 정확한 속성 복제때문에.

 

 

GLOBAL ABAP DICTIONARY TYPE을 이용한 인터널 테이블 생성

그 전에 내부테이블에는 세가지 종류가 있다.

종류 특징
STANDARD TABLE 기본 타입. 순서대로 저장. 중복 가능. 느림.
SORTED TABLE 정렬된 상태 유지. 중복 방지(UNIQUE). 빠른 검색.
HASHED TABLE 해시 알고리즘으로 빠른 검색. 중복 불가. 정렬 없음.

- 셋다 특징은 다른데 같은 내부테이블의 종류임

 

- ABAP DICTIONARY 테이블이나 구조체를 참고해서 인터널 테이블을 생성하는 방법

sorted table에 대한 결과물!

- 1 2 

- 2 4

- 3 6 이 출력된다-!

 

- types로 구조체를 선언하는 것은 마치 열 정의를 하는 것과 비슷하다.

필드명 타잆 설명
name string 학생 이름
age integer 학생 나이

 

자주 사용하는 명령어

명령어 설명
APPEND 행 추가
READ TABLE 행 읽기
LOOP AT 반복 처리
MODIFY 수정
DELETE 삭제
CLEAR, REFRESH, FREE 초기화, 메모리 해제

 

APPEND gs_sflight TO gt_sflight. " 행 추가
READ TABLE gt_sflight INTO gs_sflight WITH KEY carrid = 'LH'.
LOOP AT gt_sflight INTO gs_sflight.
  WRITE: / gs_sflight-carrid, gs_sflight-price.
ENDLOOP.

 

 

Internal Table vs DB Table

항목 DB TABLE INTERNAL TABLE
저장 위치 데이터베이스 메모리
지속성 영구적 일시적 (프로그램 종료 시 삭제)
역할 실제 데이터 저장 임시 작업용, 데이터 처리

+ Recent posts