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

정보·팁

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

에이든ABAP 개발자운영자모듈 MMSD기타조회 1

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

원문 주소: 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

아직 댓글이 없어요.

정보·팁 목록전체 목록