ABAP 내부 테이블 ③ 수정, 삭제, 중복 제거, 정렬 정리
3줄 요약
MODIFY,DELETE는TABLE을 붙이면 키로, 안 붙이면 인덱스로 줄을 찾고, 둘 다WHERE로 여러 줄을 한 번에 처리할 수도 있어요.중복 제거는 정렬 후
DELETE ADJACENT DUPLICATES가 전통적인 방법이고, 정렬 없이 쓰는DELETE DUPLICATES FROM이라는 새 문장이 있어요.SORT는 가능하면BY로 필드를 명시해요. 표준 키 때문에 정렬 결과가 달라지는 사고를 막아요.
어떤 상황에서 쓰나요
읽는 법을 알았으면 다음은 고치고 지우고 정렬하는 법이에요. 이 부분은 ABAP 입문에서 가장 많이 쓰이는데도 sy-subrc 와 키에 대한 함정이 많아서, 치트시트가 어떻게 정리하는지 보면 도움이 돼요.
핵심 내용
수정: `MODIFY`
키 값으로:
MODIFY TABLE it FROM line.또는FROM VALUE #( a = 1 b = 2 )인덱스로:
MODIFY it FROM line INDEX 1.(TABLE없음)TRANSPORTING으로 바꿀 칼럼만 제한할 수 있어요. 안 쓰면 줄 전체가 바뀌어요. 정렬/해시 테이블에서는 키 값을 바꿀 수 없어요.반환: 줄이 하나라도 바뀌었으면
sy-subrc = 0, 없으면4.MODIFY문장은 ABAP SQL 의MODIFY와 다른 것이니 혼동하지 말라고 해요.읽은 줄(필드 심볼, 참조)로 직접 고치거나, 작업 영역으로 복사한 뒤
MODIFY하는 것도 방법이에요. 테이블 식으로 직접 고칠 수도 있어요.정렬/해시 테이블의 기본 키 필드는 읽기 전용이라 고치려 하면 실행 중 오류가 나요. 컴파일 때는 잡히지 않아요.
삭제: `DELETE`
인덱스로:
DELETE it INDEX 1., 범위로DELETE it FROM 2 TO 5.키로:
DELETE TABLE it FROM line.또는DELETE TABLE it WITH TABLE KEY a = 1.(키 값을 전부 줘야 해요. 키가 비어 있으면 아무 줄도 지워지지 않아요.)조건으로 여러 줄:
DELETE it WHERE a < 6.추가 구문:
USING KEY(키 지정),FROM/TO(범위),STEP(간격),WHERE(조건)
중복 줄 제거
DELETE ADJACENT DUPLICATES FROM it COMPARING a c.— 바로 이웃한 중복만 지우므로 먼저SORT로 정렬해야 의미가 있어요.COMPARING이 없으면 사용한 키의 필드를 비교해요.DELETE DUPLICATES FROM it COMPARING ALL FIELDS.— 정렬 없이 같은 내용의 줄 중 첫 줄만 남기고 지워요.COMPARING table_line은ALL FIELDS와 같아요.두 문장 모두 기본 키가 비어 있는 표준 테이블에
COMPARING없이 쓰지 말라고 해요. 표준 키(문자형·바이트형 필드 전부)가 쓰이면 예상 밖의 결과가 나올 수 있어서예요. 지워진 줄이 하나라도 있으면sy-subrc = 0, 없으면4예요.USING KEY에 보조 키를 주면 줄을 처리하는 순서가 달라져요. 정렬 키는 보조 인덱스의 오름차순, 해시 키는 넣은 순서예요.
정렬: `SORT`
정렬 테이블은 이미 정렬되어 있으므로
SORT할 수 없어요. 표준/해시 테이블에서 쓸 수 있어요.정렬 기준은 기본 키이거나 명시한 필드예요. 보조 키로는 정렬할 수 없어요. 명시를 권해요.
SORT itab BY a b ASCENDING c DESCENDING.처럼요.간단한
SORT itab.는 표준 키가 있는 테이블에서 문자형·바이트형 필드 전부를 기준으로 정렬해 버려요. 숫자 필드만 있는 구조체라면 기본 키가 비어 있어서 정렬이 아무 효과가 없고,EMPTY KEY로 선언한 테이블도 마찬가지예요.기본 정렬은 안정적이지 않아요(같은 정렬 키의 줄들 순서가 유지되지 않을 수 있음). 순서를 유지하려면
STABLE을 붙여요.SORT itab BY table_line.은 줄 전체를 기준으로 해요.
SORT itab BY a b ASCENDING c DESCENDING.
DELETE ADJACENT DUPLICATES FROM itab COMPARING a b.
DELETE itab WHERE a < 6.주의할 점
DELETE DUPLICATES FROM은 비교적 최근에 추가된 문장이라 낮은 릴리스에서는 쓸 수 없을 수 있어요. 어느 릴리스부터인지 원문 요약에서는 확인하지 못했으니 내 시스템에서 문법 검사를 해 보세요.SORT후DELETE ADJACENT DUPLICATES패턴은 오래된 코드에 흔하지만, 정렬 기준과COMPARING필드를 서로 맞추지 않으면 중복이 남거나 엉뚱한 줄이 지워져요. 명시적으로 두 곳을 맞추세요.치트시트는 계속 갱신되는 문서예요. 첫 공개는 2022년이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
출처와 이용 안내
원문: ABAP Cheat Sheets - Internal Tables Modifying, Deleting, Sorting · 작성자 SAP SE and contributors SAP-samples · 작성일 2022-12-05 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기