
인터널 테이블: 프로그램 내에서 정의하여 사용할 수 있는 ‘로컬 동적 테이블‘이다. 인터널 테이블은 ‘동적‘인 구조체 배열이다.
인터널 테이블, 디버깅 개념이 중요. ⭐️
인터널 테이블은 항상 할당과 추가 구문이 쌍으로 움직여야 함을 명심하기.
할당하고~ 추가하고~ 할당하고~ 추가하기~
방법 두가지
로컬 테이블 타입을 이용한 인터널 테이블 생성글로벌 아밥 딕셔너리 테이블을 이용한 인터널 테이블 생성 개별 아밥 프로그램에만 사용되는 인터널 테이블을 생성하는 경우 사용.
첫번째 구조체 타입 선언,
두번째 구조체 타입 참고하는 인터널 테이블 타입 선언
세번째 이 타입을 참고하여 인터널 테이블 생성
아밥 딕셔너리 테이블이나 구조체를 참고하여 인터널 테이블을 생성하는 방법
인터널 테이블에의 LOOP 구문에서 헤더 라인이 없는 경우와 있는 경우 비교
헤더라인 없으면 Work Area(구조체)를 선언하고 나서 값을 복사한 다음 사용해야 함.
있으면 인터널 테이블의 이름은 ABAP 프로그램 내에서 헤더 라인을 의미하게 됨.
아밥 언어에 객체지향 개념이 도입되면서 클래스 내부에서는 헤더 라인 지원X.
OCCURS 구문을 포함하여 헤더 라인이 있는 인터널 타이블 사용X 권고.
(하지만 기존에 많이 사용, 편리한 기능 때문에 실무에서 여전히 많이 활용)
: 개별 entry에 접근하는 방법을 결정함. 3가지로 구분
:인덱스 트리 테이블
index를 이용하여 테이블 entry를 찾을때 바람직함.
인터널 테이블에서의 index는 단순히 데이터가 위치하는 라인 순번을 의미함.
✅ 스탠다드 테이블의 키는 항상 non-유니크로 선언해야 함!
인터널 테이블의 key를 선언할 때는 개발자가 직접 컬럼을 정의할 수 있음. : User Define Key
스탠다드 테이블은 index를 이용하여 검색하기 때문에 테이블의 라인 수에 비례하여 탐색 속도 증가함.
:인덱스 트리 테이블
key값으로 항상 정렬된 인터널 테이블 타입.
항상 정렬된 결과로 인터널 테이블에 저장해야 하는 경우에 사용함.
WITH UNIQUE 사용 가능.WITH NON-UNIQUE 만 사용 가능.: 바로가기 키(해시)
응답 속도는 인터널 테이블의 entry 수와 상관없이 항상 같음.
hash값은 hash 알고리즘으로 계산된 것.
메모리에 저장된 주솟값으로 데이터를 바로 읽을 수 있도록 도와줌.
Hashed Table은 반드시 유니크하게 선언되어야 함.
Sorted 테이블의 탐색 속도가 월등히 빠름.
Sorted 테이블의 속도가 매우 느림
- Binary Search (스탠다드 테이블)
Binary Search 는 이진 트리를 이용하여 값을 찾는 방법.
먼저 데이터를 킷값 기준으로 정렬해야 함.
: Sorted 가 read 속도 빠름.
Hashed Table 은 테이블을 READ할 때 매우 빠름.
key값을 유니크하게 구분할 수 있고, 대용량 데이터고, READ 구문이 자주 사용된다면 Hashed Table을 사용하는 것이 바람직.
성능을 고려하는 프로그램은 설계부터 유니크한 key값을 인터널 테이블로 선언하여 프로그래밍하는 습관 가지기.
MOVE 구문을 사용하여 값 할당.
구문: CLEAR, REFRESH, FREE
스탠다드, 해시 타입의 인터널 테이블 정렬 가능..
Sorted 테이블에서 SORT 명령어로를 사용하면 신텍스 에러 뜸.
SORT 명령어를 사용할 때마다 Sort Sequence가 계속 변함.
Stable sort를 사용하면 같은 데이터의 sort 순번이 보존됨.
하지만 정렬시간이 더 소요되는 단점 존재.
DESCRIBE 구문 사용.
INSERT line INTO TABLE itab
INSERT line INTO itab [Index idx].
Insert 구문은 Key 와 index를 이용해 데이터 추가 가능.
Append 구문은 index만 가능. -> 무슨 말일까
즉 hashed type의 인터널 테이블에서는 사용 불가능.
인터널 테이블을 빈 공간에 미리 생성한 후, 라인 추가 가능.
인터널 테이블의 숫자 타입 칼럼을 합산하는 기능 수행.
없을때는 append 기능 수행.
MODIFY: 한 라인 변경. Key, index 조건으로 찾아서 변경 가능.
DELETE 구문 사용
사용하기 이전에 SORT구문으로 정렬해야 원하는 결과 얻을 수 있음.
Read 구문 사용.
READ 수행 결과를 Work Area로 할당
READ 구문의 결괏값에 비교 조건을 추가하기
값이 같으면 0 반환. 같지 않으면 2 반환.
READ한 결과를 해당 컬럼만 Target에 저장하는 기능 수행.
예기치 않은 에러 때문에 프로그램 종료되는 현상.
덤프 화면에 대해서 분석하는 안목 기르기.