- APPEND
기능:내부 테이블의 끝에 데이터를 추가합니다.
용도:순차적으로 데이터를 추가할 때 사용합니다. 기본적으로 성능이 더 빠릅니다.
구문: APPEND wa TO itab.
wa는 작업 영역(work area, struncture) 또는 데이터를 추가할 변수입니다.
itab은 내부 테이블입니다.
특징: 항상 마지막 행에 데이터가 추가됩니다.
데이터 추가 후, 테이블의 행 포인터가 마지막 행으로 이동합니다.
SORTED TABLE 또는 HASHED TABLE에서는 사용할 수 없습니다.
2. INSERT
기능:내부 테이블의 특정 위치에 데이터를 삽입합니다.
용도:데이터를 특정 위치에 삽입하거나, 정렬이 필요한 테이블에서 사용합니다.
구문: INSERT wa INTO itab INDEX idx.
idx는 삽입할 위치의 인덱스입니다.
wa는 삽입할 데이터입니다.
itab은 내부 테이블입니다.
특징:INDEX를 명시하지 않으면, 기본적으로 정렬 규칙에 따라 데이터를 삽입합니다.
SORTED TABLE 또는 HASHED TABLE에서는 정렬 규칙에 따라 자동으로 위치가 결정됩니다.
인덱스를 명시한 경우, 삽입 후 테이블의 나머지 데이터가 뒤로 밀립니다.
잘못된 인덱스를 지정하면 런타임 에러가 발생합니다.
DATA: gs_data TYPE scarr,
gs_temp LIKE gs_data,
gt_data LIKE SORTED TABLE OF gs_data WITH UNIQUE KEY carrid,
gv_tabix TYPE sy-tabix.
SELECT carrid carrname
FROM scarr
INTO CORRESPONDING FIELDS OF TABLE gt_data
ORDER BY carrid.
gs_data-carrid = 'KA'.
* Case 1
*APPEND gs_data TO gt_data. "Error : ITAB_ILLEGAL_SORT_ORDER(SORTED TABLE 또는 HASHED TABLE에서는 사용할 수 없습니다.)
* Case 2
*INSERT gs_data INTO gt_data INDEX 11. " Success (정렬 안깨지는 위치)
* Case 3
*INSERT gs_data INTO TABLE gt_data. " Success (insert.. into table -> 알아서)
* Case 4
*CLEAR gv_tabix.
*LOOP AT gt_data INTO gs_temp.
* IF gs_temp-carrid > gs_data-carrid.
* gv_tabix = sy-tabix.
* EXIT.
* ENDIF.
* CLEAR gv_tabix.
* CLEAR gs_temp.
*ENDLOOP.
*IF gv_tabix IS INITIAL.
* DESCRIBE TABLE gt_data LINES gv_tabix.
* gv_tabix = gv_tabix + 1.
*ENDIF.
*INSERT gs_data INTO gt_data INDEX gv_tabix. "Success (위치 수동 계산)
cl_demo_output=>display_data( gt_data ).
기본 gt_data

case 1
Error : ITAB_ILLEGAL_SORT_ORDER
SORTED TABLE 또는 HASHED TABLE에서는 사용할 수 없는데 정렬된 테이블에
gs_data-carrid = 'KA'.
이렇게하고
APPEND gs_data TO gt_data.
삽입하려하니 정렬이 깨져 에러가 난다.
INSERT gs_data INTO gt_data INDEX 11.

정렬이 깨지지 않는 위치에 삽입했기 때문에 에러가 나지 않는다.
만약, index 9로 하게되면
ITAB_ILLEGAL_SORT_ORDER
에러난다.
INSERT gs_data INTO TABLE gt_data.
ABAP에서 INSERT ... INTO TABLE 문을 사용하면, 내부 테이블이 SORTED TABLE인 경우 정렬 규칙에 따라 자동으로 알맞은 위치에 삽입됩니다. 이 과정에서 별도로 인덱스를 지정하지 않아도 됩니다.
동작 방식
SORTED TABLE은 선언 시 KEY가 정의되어 있으며, 항상 해당 키에 따라 정렬된 상태를 유지합니다.
INSERT ... INTO TABLE을 사용할 때, 새 데이터를 삽입할 정렬된 위치를 시스템이 자동으로 계산합니다.
삽입 과정에서:
테이블의 정렬 규칙을 위반하는 데이터가 삽입되면 DUMP(런타임 오류)가 발생합니다.
중복 키 허용 여부(UNIQUE KEY 설정)에 따라 중복된 데이터를 허용하지 않을 수도 있습니다.
CLEAR gv_tabix.
LOOP AT gt_data INTO gs_temp.
IF gs_temp-carrid > gs_data-carrid.
gv_tabix = sy-tabix.
EXIT.
ENDIF.
CLEAR gv_tabix.
CLEAR gs_temp.
ENDLOOP.
IF gv_tabix IS INITIAL.
DESCRIBE TABLE gt_data LINES gv_tabix.
gv_tabix = gv_tabix + 1.
ENDIF.
INSERT gs_data INTO gt_data INDEX gv_tabix.

insert.. into table을 수동으로 구현한 방식.
index 위치를 계산하여 그 위치에 넣는다.