ABAP-READ TABLE

유재용·2025년 3월 19일

ABAP

목록 보기
10/11

ABAP READ TABLE 명령어

READ TABLE은 ABAP 프로그래밍에서 내부 테이블에서 데이터를 검색하는 데 사용되는 기본 명령어입니다. 이 명령어는 다양한 조건에 따라 테이블 항목을 읽고 처리할 수 있게 해줍니다.

기본 구문

READ TABLE itab [INTO wa | ASSIGNING <fs>]
  [WITH KEY key = value...]
  [WITH TABLE KEY key = value...]
  [INDEX idx]
  [BINARY SEARCH]
  [TRANSPORTING field1 field2...]
  [COMPARING field1 field2...]
  [REFERENCE INTO dref].

주요 옵션 설명

  • INTO wa: 검색된 항목을 작업 영역(work area)에 복사합니다.
  • ASSIGNING : 검색된 항목에 필드 심볼을 할당합니다.
  • WITH KEY: 특정 필드 값을 기준으로 데이터를 검색합니다.
  • WITH TABLE KEY: 테이블 키를 사용하여 검색합니다.
  • INDEX idx: 특정 인덱스 위치의 항목을 검색합니다.
  • BINARY SEARCH: 이진 검색을 수행합니다 (테이블이 정렬되어 있어야 함).
  • TRANSPORTING: 지정된 필드만 반환합니다.
  • COMPARING: 특정 필드만 비교합니다.
  • REFERENCE INTO: 검색된 라인에 대한 참조를 반환합니다.

사용 예제

1. 기본 READ TABLE

DATA: BEGIN OF itab OCCURS 0,
        carrid TYPE s_carr_id,
        connid TYPE s_conn_id,
        cityfrom TYPE s_from_city,
        cityto TYPE s_to_city,
      END OF itab.

DATA: wa LIKE LINE OF itab.

* 특정 키를 사용한 검색
READ TABLE itab INTO wa WITH KEY carrid = 'LH' connid = '0400'.
IF sy-subrc = 0.
  WRITE: / 'Record found:', wa-carrid, wa-connid, wa-cityfrom, wa-cityto.
ELSE.
  WRITE: / 'Record not found'.
ENDIF.

2. 인덱스를 사용한 READ TABLE

* 특정 인덱스 위치의 항목 읽기
READ TABLE itab INTO wa INDEX 5.
IF sy-subrc = 0.
  WRITE: / '5번째 항목:', wa-carrid, wa-connid.
ENDIF.

3. 이진 검색을 사용한 READ TABLE

* 테이블이 carrid 필드로 정렬되어 있다고 가정
SORT itab BY carrid.

* 이진 검색 수행
READ TABLE itab INTO wa WITH KEY carrid = 'LH' BINARY SEARCH.
IF sy-subrc = 0.
  WRITE: / '이진 검색 결과:', wa-carrid, wa-connid.
ENDIF.

4. 필드 심볼을 사용한 READ TABLE

FIELD-SYMBOLS: <fs> LIKE LINE OF itab.

* 필드 심볼에 할당
READ TABLE itab ASSIGNING <fs> WITH KEY carrid = 'LH'.
IF sy-subrc = 0.
  * 직접 필드 심볼 내용 수정 가능
  <fs>-cityfrom = 'FRANKFURT'.
  WRITE: / '수정된 값:', <fs>-carrid, <fs>-connid, <fs>-cityfrom.
ENDIF.

주요 시스템 변수

  • sy-subrc: 작업 결과를 나타냅니다. 0은 성공, 4는 레코드를 찾지 못했음을 의미합니다.
  • sy-tabix: 검색된 항목의 인덱스 위치를 저장합니다.

성능 고려사항

대용량 테이블을 처리할 때는 다음 사항을 고려하세요:

  1. 정렬된 테이블에서는 BINARY SEARCH 옵션을 사용하여 검색 속도를 높입니다.
  2. 해시 테이블(HASHED TABLE)을 사용하면 키 기반 검색이 매우 빠릅니다.
  3. 필요한 필드만 가져오려면 TRANSPORTING 옵션을 사용합니다.
  4. 루프 내에서 반복적인 READ TABLE 사용은 피하고 대신 LOOP AT ... WHERE를 고려하세요.

일반적인 오류와 해결 방법

  • 테이블이 정렬되지 않은 상태에서 BINARY SEARCH 사용 이진 검색을 사용하기 전에 반드시 테이블이 검색 키 필드로 정렬되어 있어야 합니다. 그렇지 않으면 잘못된 결과가 반환될 수 있습니다.
  • 시스템 변수 확인 누락 READ TABLE 명령 후 항상 sy-subrc를 확인하여 작업이 성공했는지 확인해야 합니다.
  • 잘못된 키 필드 사용 WITH KEY 구문에서 테이블에 존재하지 않는 필드를 지정하면 구문 오류가 발생합니다.

대안 및 관련 명령어

  • LOOP AT ... WHERE: 여러 레코드를 검색할 때 유용합니다.
  • READ TABLE ... BINARY SEARCH TRANSPORTING NO FIELDS: 레코드 존재 여부만 확인할 때 사용합니다.
  • LOOP AT itab TRANSPORTING NO FIELDS WHERE ...: 특정 조건의 레코드 수를 계산할 때 유용합니다.

READ TABLE은 ABAP 프로그래밍에서 가장 기본적이고 중요한
테이블 처리 명령어 중 하나이며, 효율적인 데이터 접근을 위한 다양한 옵션을 제공합니다.

profile
ABAP 개발자

0개의 댓글