쌓고 쌓다
Internal Table 종류와 Binary Search, OCCURS 0 구문 본문
Internal Table의 종류는 다음과 같다.
1. Standard Table
2. Sorted Table
3. Hashed Table
여기서 Standard Table과 Sorted Table은 Index Table이다.
순차적인 인덱스를 가지며, 인덱스를 이용해 데이터를 찾을 수 있다.
물론 Key를 등록하여 Key를 통해 찾을 수 있다.
만약 키를 등록하고싶지 않다면
'WITH EMPTY KEY' 옵션으로 키를 정의하지 않을 수 있다.
1. Standard Table
Standard Table의 키는 항상 Non-unique로 선언해야한다.
인터널 테이블을 생성할 때 별도로 테이블 타입을 명시하지 않으면
기본적으로 Standard Table이 생성된다.
평소에 다음과 같이 Internal Table을 생성 했을 것이다.
DATA : GT_ITAB TYPE TABLE OF T_STR.
이것 모두 사실 Standard Table이 생성되는 것이였다.
그러면
키를 지정해주지 않았는데 키는 무엇이 되나요?
모든 CHAR 타입 컬럼들을 키 컬럼으로 지정한다.
사실 모든 CHAR 타입 컬럼들을 키로 지정하는
WITH DEFAULT KEY 구문을 명시하지 않았지만
명시하지 않아도 기본적으로 이 구문을 사용한것으로 된다.
테이블 타입과 키 선언은 다음과 같이 한다.
DATA : GT_ITAB TYPE STANDARD TABLE OF T_STR WITH DEFAULT KEY.
키를 지정한 Standard Table 생성은 다음과 같이 한다.
DATA : GT_ITAB TYPE STANDARD TABLE OF T_STR WITH NON-UNIQUE KEY col1.
여기서
READ TABLE 대신 READ 기능을 할 수 있는 New Syntax가 있다.
GS_STR = GT_ITAB[ 2 ].
배열에 접근하듯이 [ ]안에 인덱스를 넣어주자.
키 값으로도 읽는 New Syntax가 있다.
GS_STR = GT_ITAB[ field1 = 'A' field2 ='B' ].
아니 조건에 맞는 데이터가 존재하는지 확인도안하고
저러면 덤프가 발생하지 않을까?
그렇다.
OPTIONAL 구문을 추가하여 사용하자.
GS_STR = GT_ITAB[ field1 = 'A' field = 'B' OPTIONAL ].
BINARY SEARCH(Standard Table)
Standard Table은 READ TABLE에서 Key로 읽더라도
데이터의 수에따라 선형적으로 증가한다.
내부적으로 정렬이 되어있지 않기에 데이터가 많을수록 읽는데 오래 걸린다는 단점이 있다.
그래서 READ TABLE에 BINARY SEARCH 옵션을 사용한다.
만약 LOOP문 안에 READ TABLE 구문이 있다면
LOOP문 이전에 SORT해주고 READ TABLE BINARY SERACH를 사용하면
성능을 개선할 수 있다.
2. Sorted Table
Sorted Table은 키 값으로 항상 정렬된 Internal Table이다.
그래서 Sorted Table에 APPEND로 데이터를 넣다보면
덤프가 발생하는 경우가 있다.
그래서 Sorted Table에는 APPEND 대신 INSERT를 사용한다.
키를 선언할때는 WITH NON-UNIQUE와 WITH UNIQUE 모두 사용 가능하다.
그래서 Non-unique/Unique를 반드시 명시해줘야 한다.
Sorted Table은 내부적으로 이진 탐색을 사용한다.
그래서 READ할떄는 Standard Table보다 속도가 빠르지만
APPEND할때는 Standard Table보다 느리다.
Sorted Table에서는 BINARY SEARCH가 기본으로 포함되어 있기에
명시 안해도 된다. 사용하면 에러가 뜬다.
Standard Table에서 Binary Search와
Sorted Table의 READ는 속도에 큰 차이가 없다.
3. Hashed Table
인덱스를 갖지 않는 테이블이다.
그래서 'READ TABLE ~ INDEX'를 사용할 수 없다.
WITH TABLE KEY 또는 WITH KEY 구문을 사용해 탐색해야한다.
해시 값으로 탐색이 이뤄져 데이터를 바로 찾을 수 있다.
DATA : GT_ITAB TYPE HASHED TABLE OF T_STR WITH UNIQUE KEY id.
OCCURS 0 구문
DATA : GT_ITAB TYPE T_STR OCCURS 0 WITH HEADER LINE.
OCCURS는 INITIAL SIZE와 같은 효과를 갖는다.
OCCURS는 인터널 테이블의 메모리 할당 라인 수를 의미한다.
0은 제한을 두지 않아 메모리 할당을 최소화 할 수 있다.
0 이외의 숫자를 사용할 수 있으나 메모리가 부족하면 시스템이 자동으로
메모리를 확보하므로 의미없다.
OCCURS 구문은 Standard Table의 형태로 생성되며
Sorted, Hashed 테이블에는 사용할 수 없다.
다음 포스팅에서는
보조키
그리고
READ TABLE 사용시
WITH TABLE KEY와 WITH KEY 차이점을 알아보자.
'SAP > ABAP' 카테고리의 다른 글
| Primary, Secondary Key와 WITH TABLE KEY, WITH KEY 차이점 (0) | 2025.11.15 |
|---|---|
| [ABAP] 피오리 GET_STREAM과 SMW0 엑셀 템플릿에 값을 넣고 응답하기 (0) | 2025.11.11 |
| [ABAP] TOP OF PAGE, TABLE 구조로 그리기 (0) | 2025.10.21 |
| [ABAP] ENUM 키워드! 변수에 정해진 값만 할당되도록 제한하기 (0) | 2025.10.20 |
| [ABAP] ALV에서 Quantity 타입 필드 값 소수점 표시 관리하기 (0) | 2025.10.18 |