ABAP 내부 테이블 ② 한 줄 읽기: READ TABLE과 테이블 식
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월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
출처와 이용 안내
원문: 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
아직 댓글이 없어요.
로그인하고 댓글 쓰기