INSERT vs MODIFY FROM TABLE — ABAP upsert 정답 #shorts #SAP #ABAP

Moderator · 조회 3

ABAP에서 MODIFY FROM TABLE이란?

MODIFY dbtab FROM TABLE itab은 내부 테이블의 레코드를 DB에 한 번에 upsert(있으면 UPDATE, 없으면 INSERT)하는 ABAP SQL 구문입니다. INSERTUPDATE를 따로 쓸 때보다 코드도 짧고 성능도 뛰어납니다.

INSERT vs MODIFY — 코드 비교

* ❌ 기존 방식 — INSERT + UPDATE 분리
LOOP AT lt_data INTO ls_data.
  SELECT SINGLE * FROM ztable
    INTO @DATA(ls_exist) WHERE id = @ls_data-id.
  IF sy-subrc = 0.
    UPDATE ztable FROM @ls_data.
  ELSE.
    INSERT ztable FROM @ls_data.
  ENDIF.
ENDLOOP.

* ✅ MODIFY FROM TABLE — 한 줄로 upsert
MODIFY ztable FROM TABLE lt_data.

MODIFY가 더 나은 이유

코드량 감소 — 존재 여부를 SELECT로 확인할 필요 없음. LOOP 없이 내부 테이블 통째로 처리합니다.

성능 향상 — Array operation으로 DB 왕복 횟수를 줄입니다. LOOP 방식 대비 대량 데이터에서 확연한 차이가 납니다.

트랜잭션 안전 — 단일 DB 작업으로 부분 실패 없이 전체가 성공하거나 실패합니다.

* 주의: PRIMARY KEY 기준으로 EXISTS 체크
* sy-subrc 은 MODIFY 성공 시 0
MODIFY ztable FROM TABLE lt_data.
IF sy-subrc <> 0.
  ROLLBACK WORK.
ENDIF.

핵심 한 줄

INSERT + UPDATE 따로 쓰지 말고, MODIFY FROM TABLE로 한 번에 upsert 처리하세요.