개념 :
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 테이블이나 구조체를 참고해서 인터널 테이블을 생성하는 방법
- 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 |
저장 위치 | 데이터베이스 | 메모리 |
지속성 | 영구적 | 일시적 (프로그램 종료 시 삭제) |
역할 | 실제 데이터 저장 | 임시 작업용, 데이터 처리 |
'SAP' 카테고리의 다른 글
easy abab 25. 인터널 테이블 명령어 - move, clear, refresh, free, sort, describe (0) | 2025.05.13 |
---|---|
easy abap 24. standard / sorted table / hashed table (0) | 2025.05.12 |
easy abap - 22. Function Module & Function Group (0) | 2025.05.11 |
easy abap 21. Local-Macro, Global-Macro (0) | 2025.05.11 |
easy abap 20. subroutine 종료 & 분기조건문 (0) | 2025.05.10 |