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

정보·팁

ABAP 내부 테이블 ② 한 줄 읽기: READ TABLE과 테이블 식

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

3줄 요약

  • 한 줄을 읽는 방법은 인덱스, 테이블 키, 자유 키 세 가지이고, 읽은 줄을 받는 곳은 작업 영역(복사), 필드 심볼, 데이터 참조(복사 없음) 중에서 골라요.

  • READ TABLE 과 테이블 식 itab[ ... ] 은 같은 일을 하지만, 못 찾으면 테이블 식은 CX_SY_ITAB_LINE_NOT_FOUND 를 던지고 sy-tabix 를 바꾸지 않아요.

  • 컬럼이 많은 테이블에서는 INTO 로 통째로 복사하지 말고 필드 심볼이나 참조를 쓰거나 TRANSPORTING 으로 필요한 필드만 복사해요.

어떤 상황에서 쓰나요

지난 회에서 테이블을 어떻게 선언하는지 봤다면, 이번 회는 그 테이블에서 한 줄을 어떻게 읽는지예요. READ TABLE ... INTO wa 만 쓰던 사람이 DATA(line) = itab[ key = 'A' ]. 같은 새 문법을 만나면 어느 쪽이 맞는지 헷갈려요. 치트시트의 읽기 편은 읽는 방법과 결과를 받는 곳을 표로 나눠서 정리해요.

핵심 내용

어떻게 줄을 지정하나

  • 인덱스로(인덱스 테이블만): READ TABLE itab INTO wa INDEX i. 기본은 기본 인덱스를 쓰고, 보조 정렬 키가 있으면 USING KEY sec_key 로 보조 인덱스를 써요.

  • 테이블 키로(키가 정의된 테이블): WITH TABLE KEY ...

  • 자유 키로: WITH KEY ... 키가 아닌 칼럼으로도 찾아요.

결과를 받는 곳 (target area)

  • 데이터 객체(INTO dobj 또는 INTO DATA(dobj)): 줄을 복사해요. 복사본을 고쳐도 테이블에는 영향이 없고, 다시 반영하려면 MODIFY 를 써야 해요. TRANSPORTING comp1 comp2 로 복사할 필드를 제한할 수 있어요.

  • 필드 심볼(ASSIGNING FIELD-SYMBOL(<fs>)): 복사하지 않고 줄을 가리켜요. 필드 심볼을 고치면 테이블 줄이 직접 바뀌어요. TRANSPORTING 은 쓸 수 없어요.

  • 데이터 참조(REFERENCE INTO DATA(dref)): 복사하지 않고, 접근하려면 역참조(dref->field)가 필요해요. TRANSPORTING 은 쓸 수 없어요.

치트시트의 팁은 이래요. 용도, 성능, 가독성으로 고르되, 테이블에 칼럼이 많거나 중첩 구조가 있으면 복사 비용이 있으니 복사하지 않는 쪽을 권해요. 복사본이 필요한 경우(테이블을 건드리지 않고 값만 쓸 때)에는 INTO dobj 가 맞아요.

테이블 식 (`itab[ ... ]`)

  • READ TABLE 의 간결한 형태로, 피연산자 위치에서 읽고 쓸 수 있어요.

  • 대괄호 안에 인덱스만 쓰면 기본 인덱스(인덱스 테이블만)를, KEY key_name INDEX i 로 인덱스를 명시할 수도 있어요.

  • 뒤에 -component 를 이어 필요한 필드만 읽을 수 있어요(itab[ 1 ]-comp2).

  • READ TABLE 과 달리 sy-tabix 를 바꾸지 않아요(ASSIGN 과 함께 쓸 때는 예외). 줄을 못 찾으면 잡을 수 있는 예외 CX_SY_ITAB_LINE_NOT_FOUND 가 발생해요.

  • 없을 수도 있으면 VALUE #( itab[ ... ] OPTIONAL ) 로 읽고, 있는지만 알고 싶으면 line_exists( itab[ ... ] ) 를 써요.

DATA(line) = itab[ comp1 = 4 ].                       " 반드시 있을 때
DATA(maybe) = VALUE #( itab[ comp1 = 99 ] OPTIONAL ).  " 없을 수도 있을 때
IF line_exists( itab[ comp1 = 7 ] ).
  ...
ENDIF.

주의할 점

  • 키 필드가 읽기 전용인 정렬/해시 테이블에서 읽은 줄을 필드 심볼이나 참조로 받아 키 필드를 고치면 실행 중 오류가 나요. 이 오류는 컴파일 때 검사되지 않는다고 치트시트가 예제로 보여 줘요.

  • 테이블 식 OPTIONAL 로 읽었는데 못 찾으면 줄 타입의 초기값이 오는 것이라, 초기값과 진짜 값을 구분하려면 line_exists 를 쓰세요(이 문장은 원문에 그대로 있는 것이 아니라 제 정리예요).

  • 치트시트는 계속 갱신되는 문서예요. 첫 공개는 2022년이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.

원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/01_Internal_Tables.md#reading-single-lines-from-internal-tables

출처와 이용 안내
  • 원문: ABAP Cheat Sheets - Internal Tables Reading Single Lines · 작성자 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

아직 댓글이 없어요.

정보·팁 목록전체 목록