바로투입이력카드
SAP 게시판

정보·팁

ABAP 내부 테이블 ③ 수정, 삭제, 중복 제거, 정렬 정리

에이든ABAP 개발자운영자모듈 MMSD기타수정됨조회 9

3줄 요약

  • MODIFY, DELETE는 TABLE을 붙이면 키로, 안 붙이면 인덱스로 줄을 찾고, 둘 다 WHERE로 여러 줄을 한 번에 처리할 수도 있어요.

  • 중복 제거는 정렬 후 DELETE ADJACENT DUPLICATES가 전통적인 방법이고, 정렬 없이 쓰는 DELETE DUPLICATES FROM 이라는 새 문장이 있어요.

  • SORT는 가능하면 BY로 필드를 명시해요. 표준 키 때문에 정렬 결과가 달라지는 사고를 막아요.

어떤 상황에서 쓰나요

내부 테이블에서 행을 읽는 방법을 배웠다면 이제 값을 수정하고, 필요 없는 행을 지우고, 순서를 정할 차례예요. 이번 글에서는 MODIFY·DELETE·SORT의 기본 형태와 키를 잘못 지정했을 때 생기는 문제를 살펴봐요.

행의 값을 바꾸는 수정, 행을 제외하는 삭제, 순서를 바꾸는 정렬을 구분해서 보세요. 아래 그림은 서로 다른 세 작업을 나타내며, 어떤 필드와 키를 기준으로 처리할지 명시하는 것이 중요합니다.

AI 설명 그림: 행을 수정하고 지우고 정렬하기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.
AI 설명 그림: 행을 수정하고 지우고 정렬하기. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.

핵심 내용

수정: 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월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.

원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/01_Internal_Tables.md#modifying-internal-table-content

출처와 이용 안내
  • 원문: 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

아직 댓글이 없어요.

정보·팁 목록전체 목록