ABAP

APPEND vs INSERT — 내부 테이블 삽입 차이 #shorts #SAP #ABAP

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 — APPENDINSERT (Internal Tables)에서 확인하세요.

댓글 0

아직 댓글이 없습니다.