[Easy ABAP 2.0] SAP ERP 입문자의 독학 공부기록 📚 [05. Internal Table]

jimi·2025년 5월 29일

이지 아밥 2.0

목록 보기
8/11
post-thumbnail

인터널 테이블: 프로그램 내에서 정의하여 사용할 수 있는 ‘로컬 동적 테이블‘이다. 인터널 테이블은 ‘동적‘인 구조체 배열이다.

인터널 테이블, 디버깅 개념이 중요. ⭐️

  • INITIAL SIZE 구문은 실제로 메모리 공간을 할당하는 것이 아니라 ‘예약‘을 하는 것임.

인터널 테이블은 항상 할당과 추가 구문이 쌍으로 움직여야 함을 명심하기.

할당하고~ 추가하고~ 할당하고~ 추가하기~

📚인터널 테이블 생성

방법 두가지

  1. 로컬 테이블 타입을 이용한 인터널 테이블 생성
  2. 글로벌 아밥 딕셔너리 테이블을 이용한 인터널 테이블 생성

1. 로컬 테이블 타입을 이용한 인터널 테이블 생성

개별 아밥 프로그램에만 사용되는 인터널 테이블을 생성하는 경우 사용.
첫번째 구조체 타입 선언,
두번째 구조체 타입 참고하는 인터널 테이블 타입 선언
세번째 이 타입을 참고하여 인터널 테이블 생성

2. 글로벌 아밥 딕셔너리 타입을 이용한 인터널 테이블 생성

아밥 딕셔너리 테이블이나 구조체를 참고하여 인터널 테이블을 생성하는 방법

인터널 테이블과 헤더 라인

인터널 테이블에의 LOOP 구문에서 헤더 라인이 없는 경우와 있는 경우 비교
헤더라인 없으면 Work Area(구조체)를 선언하고 나서 값을 복사한 다음 사용해야 함.
있으면 인터널 테이블의 이름은 ABAP 프로그램 내에서 헤더 라인을 의미하게 됨.

아밥 언어에 객체지향 개념이 도입되면서 클래스 내부에서는 헤더 라인 지원X.
OCCURS 구문을 포함하여 헤더 라인이 있는 인터널 타이블 사용X 권고.
(하지만 기존에 많이 사용, 편리한 기능 때문에 실무에서 여전히 많이 활용)

인터널 테이블 종류

: 개별 entry에 접근하는 방법을 결정함. 3가지로 구분

1. 스탠다드 테이블

:인덱스 트리 테이블
index를 이용하여 테이블 entry를 찾을때 바람직함.

인터널 테이블에서의 index는 단순히 데이터가 위치하는 라인 순번을 의미함.
✅ 스탠다드 테이블의 키는 항상 non-유니크로 선언해야 함!

인터널 테이블의 key를 선언할 때는 개발자가 직접 컬럼을 정의할 수 있음. : User Define Key

스탠다드 테이블은 index를 이용하여 검색하기 때문에 테이블의 라인 수에 비례하여 탐색 속도 증가함.

2. Sorted 테이블

:인덱스 트리 테이블
key값으로 항상 정렬된 인터널 테이블 타입.
항상 정렬된 결과로 인터널 테이블에 저장해야 하는 경우에 사용함.

  • 스탠다드 테이블과 차이점: sorted 테이블은 WITH UNIQUE 사용 가능.
    스탠다드 테이블은 WITH NON-UNIQUE 만 사용 가능.

3. Hashed 테이블

: 바로가기 키(해시)
응답 속도는 인터널 테이블의 entry 수와 상관없이 항상 같음.

hash값은 hash 알고리즘으로 계산된 것.
메모리에 저장된 주솟값으로 데이터를 바로 읽을 수 있도록 도와줌.
Hashed Table은 반드시 유니크하게 선언되어야 함.


인터널 테이블 속도 비교

스탠다드 vs Sorted 테이블

검색 속도

Sorted 테이블의 탐색 속도가 월등히 빠름.

Append 속도

Sorted 테이블의 속도가 매우 느림

  • Binary Search (스탠다드 테이블)
    Binary Search 는 이진 트리를 이용하여 값을 찾는 방법.
    먼저 데이터를 킷값 기준으로 정렬해야 함.

Binary Search vs. Sorted

검색 속도

: Sorted 가 read 속도 빠름.

Hashed Table 속도 측정

검색 속도

Hashed Table 은 테이블을 READ할 때 매우 빠름.

key값을 유니크하게 구분할 수 있고, 대용량 데이터고, READ 구문이 자주 사용된다면 Hashed Table을 사용하는 것이 바람직.

성능을 고려하는 프로그램은 설계부터 유니크한 key값을 인터널 테이블로 선언하여 프로그래밍하는 습관 가지기.

인터널 테이블 명령어

1. 인터널 테이블 값 할당

MOVE 구문을 사용하여 값 할당.

2. 📚인터널 테이블 초기화

구문: CLEAR, REFRESH, FREE

  • CLEAR: 메모리 공간 반환. 처음 메모리 양을 요구한 정보는 삭제X
    인터널. 테이블의 내용을 지우고, 할당된 메모리도 반환함.
  • REFRESH: 테이블의 내용만 삭제함. FREE 구문도 사용하여 메모리 사용 최소화하기.

📚인터널 테이블 정렬

1. SORT

스탠다드, 해시 타입의 인터널 테이블 정렬 가능..
Sorted 테이블에서 SORT 명령어로를 사용하면 신텍스 에러 뜸.

2. SORT 칼럼 지정

3. Stable SORT

SORT 명령어를 사용할 때마다 Sort Sequence가 계속 변함.
Stable sort를 사용하면 같은 데이터의 sort 순번이 보존됨.

하지만 정렬시간이 더 소요되는 단점 존재.

4. 인터벌 테이블 속성 알아내기

DESCRIBE 구문 사용.

  • LINES: 현재 라인 수 -> 주로 사용
  • OCCURS: 초기 라인 수
  • KiND: 종류 (T: 스탠다드, S: Sorted, H: 해시)

📚인터널 테이블 데이터 추가

1. ✅ INSERT 구문

1. Table Key 이용해 한 라인 추가

INSERT line INTO TABLE itab

2. Table Key 이용해 여러라인 추가

3. Index이용해 한 라인 추가

INSERT line INTO itab [Index idx].

4. 타입에 따른 INSERT 효과

  • 스탠다드 타입 : 마지막 위치에 추가. Append과 같음
  • 솔티드 타입 : 순서에 따라 추가.
  • 해시 타입 : table key의 hash index 순서에 따라 추가

2. ✅ Append 구문

Insert 구문은 Key 와 index를 이용해 데이터 추가 가능.
Append 구문은 index만 가능. -> 무슨 말일까
즉 hashed type의 인터널 테이블에서는 사용 불가능.

인터널 테이블 타입에 따른 APPEND 효과

  • 스탠다드 : 마지막 위치에 추가
  • 솔티드 : 정렬된 상태로 추가되도록 로직 구성해야 함.
  • 해시 : append 사용 불가.

append initial line

인터널 테이블을 빈 공간에 미리 생성한 후, 라인 추가 가능.

3. ✅ COLLECT 구문

인터널 테이블의 숫자 타입 칼럼을 합산하는 기능 수행.
없을때는 append 기능 수행.

📚인터널 테이블 데이터 변경

MODIFY: 한 라인 변경. Key, index 조건으로 찾아서 변경 가능.

📚인터널 테이블 데이터 삭제

DELETE 구문 사용

ADJACENT DUPLICATE 구문을 이용해 중복 라인 삭제

사용하기 이전에 SORT구문으로 정렬해야 원하는 결과 얻을 수 있음.

📚인터널 테이블 읽기

Read 구문 사용.

Work Area 할당

READ 수행 결과를 Work Area로 할당

1. COMPARING 옵션

READ 구문의 결괏값에 비교 조건을 추가하기
값이 같으면 0 반환. 같지 않으면 2 반환.

2. TRANSPORTING 옵션

READ한 결과를 해당 컬럼만 Target에 저장하는 기능 수행.

Dump Error

예기치 않은 에러 때문에 프로그램 종료되는 현상.
덤프 화면에 대해서 분석하는 안목 기르기.

profile
멋진 SAP 전문가가 되기 위하여

0개의 댓글