📌 내부 테이블에서 레코드 삭제하기 – DELETE 문


✅ 기본 개념

DELETE 문을 사용하면 내부 테이블에서 특정 레코드 하나 또는 조건에 맞는 여러 레코드를 삭제할 수 있다.

👉 삭제할 때 가장 빠른 방법은 인덱스(index) 를 이용하는 것!!!


① 인덱스를 이용한 삭제 (가장 빠름)

DELETE itab01 INDEX 3.
  • 내부 테이블 itab01의 3번째 레코드를 삭제함.
  • 헤더 라인(header line) 은 사용하지 않고, 테이블 본문(body) 을 직접 수정함.
  • standard table, sorted table에서만 가능 (hash table은 index 개념 없음).

② 루프 안에서 조건을 이용한 삭제

루프를 돌면서 특정 조건에 맞으면 삭제할 수도 있다.

LOOP AT itab01. IF surname = 'Smith'. DELETE itab01 INDEX sy-index. ENDIF. ENDLOOP.
  • sy-index는 현재 루프의 반복 횟수를 의미하는 시스템 변수.
  • 예: 루프가 5번째 돌고 있다면 sy-index = 5가 됨 → 5번째 레코드를 삭제함.
  • 중요: 루프 안에서 DELETE를 사용할 때는 꼭 INDEX sy-index 같이 인덱스를 명시해야 함.
    • 그렇지 않으면 ABAP 최신 문법에서는 에러가 날 수 있다.

③ WHERE 조건을 이용한 삭제

삭제할 레코드의 인덱스를 모를 때 사용!

DELETE itab01 WHERE surname = 'Smith'.
  • 내부 테이블에서 surname이 'Smith'인 모든 레코드를 삭제함.
  • 조건에 맞는 레코드를 하나만 삭제하는 게 아님!
    • 일치하는 레코드가 여러 개면 전부 삭제됨.
  • 항상 구체적인 조건을 쓰는 게 중요하다.

🔍 요약


방식 설명 특징
DELETE ... INDEX n n번째 레코드 삭제 가장 빠름, index 번호를 알아야 함
루프 안에서 sy-index 사용 현재 루프 위치의 레코드 삭제 루프 조건에 따라 삭제 가능
DELETE ... WHERE ... 조건에 맞는 모든 레코드 삭제 조건이 모호하면 모두 삭제됨

💡 주의사항

  • 루프 밖에서 DELETE를 쓰는 경우, INDEX 또는 WHERE를 반드시 사용해야 함.
  • 조건 없이 DELETE만 쓰면 에러 날 수 있음!
  • 특히 WHERE 조건을 쓸 때는, 삭제할 대상이 명확하도록 조건을 구체화하는 게 중요함.

+ Recent posts