최종 작성일: 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 |