ABAP APPEND와 INSERT의 차이
ABAP 내부 테이블에 행을 추가하는 방법은 APPEND와 INSERT 두 가지입니다. 겉으로는 비슷해 보이지만 동작 방식, 중복 처리, 테이블 타입별 호환성에서 중요한 차이가 있습니다. 잘못 선택하면 중복 데이터가 쌓이거나 런타임 오류가 발생합니다.
APPEND: 항상 마지막에 추가
" APPEND는 항상 테이블의 끝에 행을 추가 DATA lt_items TYPE STANDARD TABLE OF zbtp_order_item WITH DEFAULT KEY. " APPEND 사용 APPEND VALUE #( order_id = 'SO001' item_no = 10 product = 'LAPTOP' qty = 2 amount = 3000000 ) TO lt_items. APPEND VALUE #( order_id = 'SO001' item_no = 20 product = 'MOUSE' qty = 1 amount = 45000 ) TO lt_items. " 결과: lt_items에 2개 행, 입력 순서대로 저장 " APPEND는 STANDARD TABLE에서만 사용 " SORTED/HASHED TABLE에 APPEND → 런타임 오류
INSERT: 위치 지정 삽입
" INSERT는 특정 위치에 삽입 가능
DATA lt_items TYPE STANDARD TABLE OF zbtp_order_item WITH DEFAULT KEY.
" 특정 인덱스 앞에 삽입
INSERT VALUE #(
order_id = 'SO001'
item_no = 5
product = 'KEYBOARD'
qty = 1
amount = 150000
) INTO lt_items INDEX 1.
" lt_items[1]이 새 행이 되고, 기존 항목은 뒤로 밀림
" SORTED TABLE에 삽입 (자동 정렬)
DATA lt_sorted TYPE SORTED TABLE OF zbtp_order_item
WITH UNIQUE KEY order_id item_no.
INSERT VALUE #( order_id = 'SO001' item_no = 30 product = 'MONITOR' )
INTO TABLE lt_sorted.
" 자동으로 order_id, item_no 순으로 정렬되어 삽입
" HASHED TABLE에 삽입
DATA lt_hash TYPE HASHED TABLE OF zbtp_order_item
WITH UNIQUE KEY order_id item_no.
INSERT VALUE #( order_id = 'SO001' item_no = 10 product = 'LAPTOP' )
INTO TABLE lt_hash.
" 해시 계산 후 삽입
중복 처리의 차이
" STANDARD TABLE: APPEND/INSERT 모두 중복 허용
DATA lt_std TYPE STANDARD TABLE OF zbtp_item WITH DEFAULT KEY.
APPEND VALUE #( item_id = 'A001' name = 'First' ) TO lt_std.
APPEND VALUE #( item_id = 'A001' name = 'Second' ) TO lt_std.
" lt_std에 동일 item_id가 두 개 존재 → READ TABLE은 첫 번째만 반환
" SORTED TABLE with UNIQUE KEY: 중복 시 sy-subrc = 4
DATA lt_sorted TYPE SORTED TABLE OF zbtp_item
WITH UNIQUE KEY item_id.
INSERT VALUE #( item_id = 'A001' name = 'First' ) INTO TABLE lt_sorted.
INSERT VALUE #( item_id = 'A001' name = 'Second' ) INTO TABLE lt_sorted.
" 두 번째 INSERT → sy-subrc = 4 (삽입 실패, 오류 없음)
IF sy-subrc <> 0.
" 중복 처리 로직
ENDIF.
" HASHED TABLE with UNIQUE KEY: 동일
DATA lt_hash TYPE HASHED TABLE OF zbtp_item
WITH UNIQUE KEY item_id.
INSERT VALUE #( item_id = 'A001' name = 'First' ) INTO TABLE lt_hash.
INSERT VALUE #( item_id = 'A001' name = 'Second' ) INTO TABLE lt_hash.
" sy-subrc = 4 (삽입 실패)
대량 삽입: 단일 행 vs 집합
" 단일 행 반복 APPEND (느림) DO 10000 TIMES. APPEND VALUE #( ... ) TO lt_data. ENDDO. " 집합 INSERT (빠름) DATA lt_source TYPE STANDARD TABLE OF zbtp_source. SELECT * FROM zbtp_source INTO TABLE @lt_source. " 전체 테이블을 한 번에 INSERT INSERT LINES OF lt_source INTO TABLE lt_data. " lt_source의 모든 행을 lt_data에 한 번에 추가
선택 기준 요약
- APPEND: STANDARD TABLE에만 사용. 항상 끝에 추가. 순서가 중요할 때.
- INSERT INTO TABLE: 모든 테이블 타입에 사용 가능. SORTED/HASHED에서는 자동 배치.
- INSERT INTO ... INDEX: STANDARD TABLE에서 특정 위치에 삽입.
- SORTED/HASHED에는 APPEND 절대 금지 (런타임 오류).
공식 문서
ABAP APPEND와 INSERT 문법은 ABAP Keyword Documentation — APPEND와 INSERT (Internal Tables)에서 확인하세요.
댓글 0
아직 댓글이 없습니다.