1. 인터널 테이블 값 할당
- 다른 변수와 같이 인터널 테이블도 MOVE 구문을 사용하여 값을 할당할 수 있다.
- 헤더라인이 있는 인터널 테이블은 헤더 라인 값만 복사됨
MOVE itab1 to itab2. " itab2 = itab1
MOVE itab1[] to itab2[]. "itab2[] = itab1[]. 구문과 동일
- 인터널 테이블 타입이 같아야 함
- 타입이 다르면 칼럼 순서대로 값을 할당함
- Unicode check active이 설정되어 있으면, 문자 타입과 숫자 타입 사이에 Alignment GAP이 생성되기에 에러가 발생할 수 있음
MOVE-CORRESPONDING itab1 to itab2.
- 헤더라인이 있으면 헤더 라인과 인터널 테이블이름은 같다. 이를 구분하기 위해 인터널 테이블의 BODY를 []기호를 이용해 구분한다.
- 대괄호 [] 는 헤더 라인이 있는 인터널 테이블의 Body내용을 가르킨다.
2. 인터널 테이블 초기화
- `clear, refresh, free`
1. CLEAR — 변수나 내부 테이블의 내용을 초기화
- 모든 타입에 사용 가능
- 변수일 경우: 기본값으로 초기화
- 내부 테이블일 경우: 데이터만 삭제, 구조는 남음
CLEAR lv_name. " 문자열 → ''
CLEAR lv_num. " 숫자형 → 0
CLEAR gt_itab. " 내부 테이블 → 데이터만 삭제
- 구조(타입)은 그대로 남아 있음
- 메모리 공간을 반환(Release)하지만, 처음 메모리양을 요구한 정보는 삭제하지 않는다.
2. REFRESH — 내부 테이블의 모든 행 삭제 (데이터만 초기화)
- CLEAR와 유사하지만 내부 테이블에만 사용
- 내부적으로는 DELETE gt_itab WHERE 1 = 1. 과 유사
REFRESH gt_itab.
- 구조는 유지
- 메모리는 남아 있음
3. FREE — 메모리까지 완전히 해제
- 내부 테이블 사용 후 메모리를 반납하고 싶을 때 사용
- 대용량 데이터 처리 후 자원 최적화에 도움됨
FREE gt_itab.
- 구조까지 삭제됨. 모든 행 데이터 삭제됨!
- 다시 쓰려면 `DATA:` 로 재선언 필요
- `READ` `APPEND` 등 다시 쓰면 에러가 발생할 수 있음
- 내부 테이블에 할당된 메모리까지 반납됨!
명령어 | 대상 | 기능 요약 | 메모리해제 | 구조유지 |
CLEAR | 변수, 구조체, 테이블 | 기본값 초기화 | ❌ | ✅ |
REFRESH | 내부 테이블 | 모든 행 삭제 | ❌ | ✅ |
FREE | 내부 테이블 | 데이터 삭제 + 메모리 해제 | ✅ | ❌ |
=> Internal Table has no data가 뜬다!
3. 인터널 테이블 정렬
SORT itab. " 기본 정렬: 내부 테이블 구조 기준, 기본 키 순
- Standard or Hashed type의 인터널 테이블을 정렬할 수 있음
- sort 정렬의 기본 값은 AS이다.
- Sorted table은 테이블 자체에 정렬된 데이터를 가지고 있기 때문에 SORT명령어를 사용하면 syntax error가 뜬다.
SORT BY — 정렬 기준 지정
SORT itab BY carrid connid.
- by 뒤에 정렬할 필드 지정 가능
- 여러 필드도 가능핟/ 먼저 carrid로 정렬하고, 그 안에서 connid 기준으로 정렬됨
write 하면 AA 0017, AA 0019, BA 0018이 출력된다.
STABLE — 정렬 시 기존 순서 유지
즉, 동일한 값들끼리는 원래의 순서를 그대로 유지
SORT gs_flight STABLE BY carrid.
- STABLE 옵션은 같은 데이터라도 처음 위치한 순서가 SORT에 의해서 순번이 변경되지 않도록 하는 것.
- sort 명령어를 사용할 때 마다 sort sequence가 계속 변한다.
- stable sort 구문을 활용하면, sort sequenc가 보존된다=> 하지만 정렬시간은 더 소요되는 단점이 있다.
- 이미 정렬된 순서가 유지되게끔 쓰기 위해서 쓰기도함
4. 인터널 테이블 속성 알아내기
- internal table속성을 알고싶다면 DESCRIBE구문을 사용한다.
DESCRIBE TABLE itab [LINES gv_ line] [OCCURS gv_init] [KIND gv_kind].
- LINES는 인터널 테이블에 존재하는 현재 라인수를 반환
- OCCURS는 인터널 테이블의 초기 라인 수를 반환
- KIND는 인터널 테이블의 종류를 반환
- T => Standard Table
- S => Sorted Table
- H => Hashed Table
DESCRIBE FIELD <var> LENGTH <len> IN CHARACTER MODE.
- Length : 바이트 단위
- In character mode : 문자 단위
이렇게 하면 gv_line에 gt_flight의 행의 개수를 출력할 수 있다.
=> 총 4개!
'SAP' 카테고리의 다른 글
easy abap 27. append (0) | 2025.05.13 |
---|---|
easy abap 26. INSERT (0) | 2025.05.13 |
easy abap 24. standard / sorted table / hashed table (0) | 2025.05.12 |
easy abap 23. Internal Table 정의, 생성 (0) | 2025.05.11 |
easy abap - 22. Function Module & Function Group (0) | 2025.05.11 |