SAP ABAP 내부 테이블: 생성, 읽기, 채우기, 복사 및 삭제
내부 테이블이란 무엇입니까?
내부 테이블 ABAP에서 동적으로 사용하기 위해 고정된 구조에서 데이터를 얻는 데 사용됩니다. 내부 테이블의 각 줄은 동일한 필드 구조를 갖습니다. 내부 테이블의 주요 용도는 프로그램 내 데이터베이스 테이블의 데이터를 저장하고 형식화하는 것입니다.
작업 영역이란 무엇입니까?
작업 영역은 단일 데이터 행입니다. 내부 테이블과 형식이 동일해야 합니다. 내부 테이블의 데이터를 한 번에 한 줄씩 처리하는 데 사용됩니다.
내부 테이블과 작업 영역의 차이점은 무엇입니까?
사진은 천 단어를 말해줍니다
내부 테이블의 유형
내부 테이블에는 두 가지 유형이 있습니다.
- HEADER 라인이 있는 내부 테이블
- HEADER 줄이 없는 내부 테이블입니다.
헤더 라인이 있는 내부 테이블
- 여기서 시스템은 자동으로 작업 영역을 생성합니다.
- 작업 영역은 내부 테이블과 동일한 데이터 유형을 갖습니다.
- 이 작업 영역을 HEADER 라인이라고 합니다.
- 여기에서 테이블 내용에 대한 모든 변경이나 작업이 완료됩니다. 결과적으로 레코드를 테이블에 직접 삽입하거나 내부 테이블에서 직접 액세스할 수 있습니다.
헤더 라인이 없는 내부 테이블 :
- 여기에는 테이블과 연관된 작업 영역이 없습니다.
- 이러한 테이블에 액세스해야 할 경우 작업 영역을 명시적으로 지정해야 합니다.
- 따라서 이러한 테이블에는 직접 액세스할 수 없습니다.
내부 테이블 생성
내부 테이블을 생성하는 방법에는 여러 가지가 있습니다. 하나씩 살펴보도록 하겠습니다-
1. Type 문을 사용하여
이제 다음을 사용하여 내부 테이블 itab을 생성해 보겠습니다. TYPE 문.
구문은 -
Types : begin of line, column1 type I, column2 type I, end of line.
예:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
TYPES 문은 정의된 대로 구조 라인을 생성합니다.
실제로 내부 테이블 itab을 생성하려면 다음 명령을 사용하십시오.
Data itab type line occurs 10.
내부 테이블 itab은 line 구조로 생성됩니다. 내부 테이블의 구조를 선언하는 것 외에도 OCCURS 절은 주 저장소에 유지되는 테이블 항목 수(이 경우 10)를 정의합니다. 추가 레코드가 페이징 영역에 기록되어 성능에 영향을 미칠 수 있음
2.다른 Table을 참조하여
기존 테이블을 참조하여 내부 테이블을 생성할 수 있습니다. 기존 테이블이 표준이 될 수 있음 SAP 테이블, Z 테이블 또는 다른 내부 테이블.
통사론-
Data <f> <type> [with header line].
예-
DATA itab TYPE line OCCURS 10 with header line.
여기서 내부 테이블 itab은 헤더 라인이 있는 유형 라인으로 생성됩니다. "헤더 라인 포함"은 선택 사항입니다.
3.기존 구조를 참고하여
통사론-
Data <f> LIKE <struct> occurs n [with header line].
예-
DATA itab LIKE sline OCCURS 10.
여기서는 sline과 동일한 구조를 갖는 itab 테이블이 생성됩니다.
4. 새로운 구조를 생성하여
이제 우리 자신의 구조를 가진 내부 테이블을 만들어 보겠습니다. 여기서 테이블은 헤더 라인으로 생성됩니다. 기본적으로.
구문 –
Data : Begin of <f> occurs <n>, <component declaration>, ................................., End of <f>.
예 -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
내부 테이블 itab이 생성됩니다.
내부 테이블 채우기
이제 일부 내부 테이블을 성공적으로 생성했으므로 일부 레코드로 해당 테이블을 채우는 방법을 살펴보겠습니다. 테이블을 채우는 데 사용할 수 있는 다양한 방법이 있습니다.
1. 데이터를 한 줄씩 추가합니다.
사용 가능한 첫 번째 방법은 APPEND 문을 사용하는 것입니다.
APPEND 문을 사용하여 다른 작업 영역의 한 줄을 내부 테이블에 추가하거나 내부 테이블에 첫 번째 줄 한 개를 추가할 수 있습니다.
구문 –
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
여기 작업 영역 또는 초기 라인이 내부 테이블에 추가됩니다. .
시스템 변수 SY-TABIX에는 추가된 줄의 인덱스가 포함되어 있습니다.
예:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
결과 : ' ' '0'
초기 라인은 해당 유형에 대한 올바른 값으로 초기화된 라인을 테이블에 추가합니다. 여기서 col1은 문자이고 col2는 정수입니다. 그런 다음 APPEND 초기 라인은 열의 데이터 유형(예: col1의 경우 공백, col0의 경우 2)과 관련하여 초기화된 라인을 추가합니다.
2.COLLECT 문 사용
COLLECT는 내부 테이블을 채우는 데 사용되는 또 다른 형태의 명령문입니다. 일반적으로 COLLECT는 고유한 표준 키를 사용하여 내부 테이블에 행을 삽입할 때 사용됩니다.
통사론-
COLLECT [<wa> INTO] <itable>.
Header Line이 있는 테이블의 경우 INTO 옵션이 생략됩니다. 추가하려는 항목과 동일한 키를 가진 항목이 이미 있고 테이블에 새 줄이 추가되지 않지만 두 항목의 숫자 필드가 모두 추가되고 키에 해당하는 항목이 하나만 있다고 가정합니다. . SY-TABIX 값이 원래 항목의 행으로 변경됩니다. 그렇지 않으면 COLLECT는 APPEND와 유사하게 작동하며 SY-TABIX에는 처리된 라인의 인덱스가 포함됩니다.
3.INSERT 문 사용
INSERT 문은 내부 테이블에 라인/작업 영역을 추가합니다. INSERT 문과 함께 INDEX 절을 사용하여 새 줄을 추가할 위치를 지정할 수 있습니다.
통사론
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
여기는 작업공간 또는 INITIAL LINE이 내부 테이블에 삽입됩니다. 색인에서 .
내부 테이블 복사
한 내부 테이블의 내용은 APPEND LINES 또는 INSERT LINES 문을 사용하여 다른 내부 테이블로 복사할 수 있습니다. 더 간단한 방법은 다음 구문 중 하나를 사용하는 것입니다.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
ITAB1의 내용을 ITAB2에 복사합니다. 헤더 라인이 있는 내부 테이블의 경우 작업 영역과 구별하기 위해 []를 사용해야 합니다. 따라서 헤더 줄이 포함된 내부 테이블의 내용을 복사하려면 구문은 다음과 같습니다.
itab1[] = itab2[].
내부 테이블 읽기
이제 우리는 내부 테이블을 생성하고 여기에 데이터를 채우는 방법에 대해 잘 알고 있습니다. 이제 실제로 데이터를 사용하거나 내부 테이블에서 데이터를 검색하는 방법을 살펴보겠습니다.
1. 루프 사용 -Endloop
내부 테이블에 액세스하거나 읽는 방법 중 하나는 LOOP-ENDLOOP를 사용하는 것입니다.
통사론
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
여기서 LOOP AT ITABLE이라고 말하면 내부 테이블 ITABLE이 한 줄씩 읽혀집니다. LOOP-ENDLOOP 구조의 어느 부분에서나 해당 행의 열 값에 액세스할 수 있습니다. SY-SUBRC의 값은 다음과 같이 설정됩니다. 0, 하나의 레코드만 읽은 경우에도 마찬가지입니다.
2. READ 사용
내부 테이블을 읽는 또 다른 방법은 READ 문을 사용하는 것입니다.
통사론-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
이 문은 현재 줄이나 인덱스에 지정된 줄을 읽습니다. . SY-TABIX의 값은 읽은 줄의 인덱스입니다. 지정된 인덱스가 있는 항목이 발견되면 SY-SUBRC는 0으로 설정됩니다. 지정된 인덱스가 0보다 작으면 런타임 오류가 발생합니다. 지정된 인덱스가 테이블 크기를 초과하면 SY-SUBRC가 4로 설정됩니다.
내부 테이블 삭제
내부 테이블에서 행을 삭제하는 방법에는 여러 가지가 있습니다.
1. 루프에서 줄을 삭제합니다.
이것은 줄을 삭제하는 가장 간단한 방법입니다.
통사론
DELETE <ITABLE>.
이 문은 루프 내에서만 작동합니다. 현재 줄을 삭제합니다. 다음을 추가하여 조건부로 루프의 행을 삭제할 수 있습니다. WHERE 절.
2. 색인을 사용하여 줄을 삭제합니다.
이는 알려진 인덱스의 내부 테이블에서 행을 삭제하는 데 사용됩니다.
통사론
DELETE <ITABLE> INDEX <IDX>.
인덱스가 있는 라인 삭제됩니다. 다음 줄의 인덱스가 1 감소합니다.