본문 바로가기

SAP/ABAP

[WIP]Read Table

최종 작성일: 2024-06-03

목표: read table 구조 이해하기

 

 

목적: Read Table을 쓰는 이유는?

-> 특정 테이블을 조인해서 쓴다고 했을 때 Join해서 가져온다고 하기에는 속도도 안좋고 안정성도 떨어짐

-> 따라서 read table을 통해서 인터널 테이블로 조인을 해놓고 씀

 

혹은...

 

Internal Table의 데이터에 접근 하는 방법이 크게 1) LOOP  AT 인터널 테이블 INTO 행 2) READ TABLE 인터널 테이블 INTO 행이 있음. 데이터 접근 방식으로도 구분 가능.

 

LOOP AT은 인터널 테이블에 있는 행을 한줄씩 다 읽는 거고

READ TABLE은 인터널 테이블에 있는 특정 행만 읽는 것

 

공통점은 1) 인터널 테이블을 대상으로 2) 한줄 (씩) 읽는다

READ 테이블 사용 방법

1. READ TABLE 테이블 WITH KEY 필드 조건        -> key가 없는 standard table 구조에서 사용
2. READ TABLE 테이블 WITH TABLE KEY 필드 조건 -> sorted 나 hash 테이블 처럼 key가 있는 경우
3. READ TABLE 테이블 INDEX 인덱스

 

예시)

READ TABLE it_mara WITH KEY matnr = '1234'
                            mtart = 'FERT'.
 
READ TABLE it_mara2 INDEX 2.

READ TABLE it_mara3 WITH KEY matnr = '1234'
                             mtart = 'FERT'
          INTO wa_mara3.
READ TABLE it_mara3 with wa_mara3.

 

아래 예시는 키 값을 기준으로 테이블을 만들어 놓고 값을 다 불러온다음에,

특정 칼럼의 값에 계산식을 추가한것

=아래 예시

*&---------------------------------------------------------------------*
*& Report ZREVIEW_READTABLE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZREVIEW_READTABLE.

PARAMETERS : p_carrid TYPE sflight-carrid,
            p_connid TYPE sflight-connid,
            p_fldate TYPE sflight-fldate.

DATA sflight_tab type SORTED TABLE OF sflight with UNIQUE key carrid connid fldate.

SELECT *
  FROM sflight
  WHERE carrid = @p_carrid AND
        connid = @p_connid AND
        fldate = @p_fldate
  INTO table @sflight_tab.

IF sy-subrc = 0.
  READ TABLE sflight_tab
  INTO DATA(sflight_wa)
  with TABLE KEY carrid = p_carrid   "with table key는 key가 있는 구조인 sorted table에서 사용 하고 standard table에서는 'with key'를 수용
                 connid = p_connid
                 fldate = p_fldate.

IF sy-subrc EQ 0.
  sflight_wa-price = sflight_wa-price * ' 0.9'.
  modify sflight_tab FROM sflight_wa INDEX sy-tabix.
  ENDIF.
 ENDIF.

 cl_demo_output=>display( sflight_tab ).

 

기본 구조

if sy-subrc = 0.

read table 테이블 into 행

with table key 조건.

 

if sy-subrc = 0.

행 값 변경

modify 테이블 from 행 index sy-tabix

endif..

endif.

 

PARAMETERS 선언

테이블 선언(sorted table)

 

SELECT *

FROM  스탠다드 테이블

WHERE 선언한 파라미터 = 스탠다트 테이블 변수

INTO TABLE 선언한 테이블

 

 

IF sy-subrc = 0.

   READ TABLE 선언한 테이블

   with table key 

 

 

   INTO DATA(선언한 행).

 

IF sy-subrc  eq 0.

    행 = 행 계산식

    MODIFY 선언한 테이블 FROM 선언한 행 INDEX sy-tabix.

ENDIF.

ENDI

 

'SAP > ABAP' 카테고리의 다른 글

[WIP]두 테이블 조인하기 - READ TABLE  (0) 2024.06.04
[WIP]Read Table의 기본  (0) 2024.06.04
sort + collect  (0) 2024.06.03
ALV로 집계테이블 만들기 (LOOP AT, COLLECT)  (0) 2024.05.31
Loop 구문과 Collect 구문의 구조  (0) 2024.05.29