DB Table의 인터널테이블 생성 시, 다른 ITAB에 있는 필드를 기준으로 데이터를 조회한다.
신문법에서는 JOIN 시 ITAB을 사용할 수 있으나(INNER JOIN lt_data AS a
), 구문법에서는 불가능해 FOR ALL ENTRIES 구문을 사용했다.
- DB테이블의 ITAB, 조건ITAB, ITAB의 복사본 선언 및 데이터 할당
- 조건ITAB에서 조건에 맞는 레코드만 남긴다.
DELETE gt_scarr WHERE currcode NE 'EUR'.
- 조건ITAB을 복사한 ITAB'을 만든다.
MOVE-CORRESPONDING
문 사용해 복사- DB테이블과 매칭할 필드를 기준으로 ITAB'을 중복제거한다.
SORT <ITAB'> BY <기준필드>
DELETE ADJACENT DUPLICATES <ITAB'> COMPARING <기준필드>
- ITAB'을 기준으로 DB테이블의 ITAB에 데이터를 담는다.
- 이니셜 체크
IF <ITAB'> IS NOT INITIAL.
SELECT
문
FOR ALL ENTRIES IN <ITAB'>
WHERE <기준필드> EQ <ITAB'-기준필드>
DATA : BEGIN OF gs_sflight, <" --- 매칭 필드를 포함한 조건ITAB 선언>
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
planetype TYPE sflight-planetype,
seatsmax TYPE sflight-seatsmax,
seatsocc TYPE sflight-seatsocc,
paymentsum TYPE sflight-paymentsum,
seatsmax_b TYPE sflight-seatsmax_b,
seatsocc_b TYPE sflight-seatsocc_b,
seatsmax_f TYPE sflight-seatsmax_f,
seatsocc_f TYPE sflight-seatsocc_f,
END OF gs_sflight,
gt_sflight LIKE TABLE OF gs_sflight,
BEGIN OF gs_sbook, <" --- DB테이블의 ITAB 선언>
carrid TYPE sbook-carrid,
connid TYPE sbook-connid,
fldate TYPE sbook-fldate,
bookid TYPE sbook-bookid,
custtype TYPE sbook-custtype,
forcuram TYPE sbook-forcuram,
forcurkey TYPE sbook-forcurkey,
order_date TYPE sbook-order_date,
END OF gs_sbook,
gt_sbook LIKE TABLE OF gs_sbook,
BEGIN OF ls_key, <" -- ITAB' 선언. 매칭 기준 : CARRID, CONNID, FLDATE>
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
END OF ls_key,
lt_key LIKE TABLE OF ls_key.
CLEAR : gs_sflight, gs_sbook.
REFRESH : gt_sflight, gt_sbook, lt_key.
SELECT carrid connid fldate price currency planetype
seatsmax seatsocc paymentsum seatsmax_b
seatsocc_b seatsmax_f seatsocc_f
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
FROM sflight
WHERE carrid IN ('DL', 'LH').
DELETE gt_sflight WHERE planetype EQ 'A380-800'
OR planetype EQ 'A340-600'.
만들어둔 ITAB을 변형시키지 않고 매칭용 필드만 뽑아내기 위함이다.
MOVE-CORRESPONDING gt_sflight TO lt_key.
중복제거하면 매칭 기준(KEY)가 될 레코드만 남는다.
SORT lt_key BY carrid connid fldate.
DELETE ADJACENT DUPLICATES FROM lt_key COMPARING carrid connid fldate.
매핑 키를 담은 ITAB'을 기준으로, DB테이블의 ITAB에 레코드를 담는다.
FOR ALL ENTRIES
를 사용한다.IF lt_key IS NOT INITIAL.
SELECT carrid connid fldate bookid
custtype forcuram forcurkey order_date
INTO CORRESPONDING FIELDS OF TABLE gt_sbook
FROM sbook
FOR ALL ENTRIES IN lt_key
WHERE carrid EQ lt_key-carrid
AND connid EQ lt_key-connid
AND fldate EQ lt_key-fldate.
ENDIF.