APPEND
를 통해 데이터를 생성한다 (값 또는 변수를 저장)<* gs_list = 출력용 *>
DATA : BEGIN OF gs_list,
carrid TYPE scarr-carrid,
connect_no TYPE spfli-connect_no,
connid TYPE spfli-connid,
countryfr TYPE spfli-countryfr,
countryto TYPE spfli-countryto,
fltime TYPE spfli-fltime,
deptime TYPE spfli-deptime,
END OF gs_list,
gt_list LIKE TABLE OF gs_list,
gs_spfli TYPE spfli,
gt_spfli TYPE TABLE OF spfli.
CLEAR : gs_list, gs_spfli.
REFRESH : gt_list, gt_spfli.
<* 다른 ITAB의 DATA 중 원하는 조건에 맞는 레코드만 출력용 ITAB에 담는법 학습 *>
<* spfli의 데이터를 가져와 gt_spfli에 담는다 *>
SELECT carrid connid countryfr cityfrom airpfrom countryto
cityto airpto fltime deptime arrtime distance
distid fltype period
INTO CORRESPONDING FIELDS OF TABLE gt_spfli
FROM spfli.
<* 에러캐치문 *>
IF sy-subrc NE 0.
WRITE : 'Data not found'.
STOP.
ENDIF.
<* CARRID 가 'DL','KO','LH'인 레코드만 출력용 ITAB에 저장하기 *>
LOOP AT gt_list INTO gs_list.
IF gs_spfli-carrid EQ 'DL' OR
gs_spfli-carrid EQ 'KO' OR
gs_spfli-carrid EQ 'LH'.
gs_list-carrid = gs_spfli-carrid.
gs_list-connid = gs_spfli-connid.
gs_list-countryfr = gs_spfli-countryfr.
gs_list-countryto = gs_spfli-countryto.
gs_list-fltime = gs_spfli-fltime.
gs_list-deptime = gs_spfli-deptime.
<* 적재 : gt_list는 텅텅 비어있으므로 MODIFY가 아니라 APPEND를 사용한다 *>
APPEND gs_list TO gt_list.
CLEAR gs_list. <" 다음 사용을 위해 CLEAR한다 *>
ENDIF.
ENDLOOP.
<할당 연산자>
gs_list-carrid = gs_spfli-carrid.
gs_list-connid = gs_spfli-connid.
gs_list-countryfr = gs_spfli-countryfr.
gs_list-countryto = gs_spfli-countryto.
gs_list-fltime = gs_spfli-fltime.
gs_list-deptime = gs_spfli-deptime.
<MOVE 구문>
MOVE : gs_spfli-carrid TO gs_list-carrid,
gs_spfli-connid TO gs_list-connid,
gs_spfli-countryfr TO gs_list-countryfr,
gs_spfli-countryto TO gs_list-countryto,
gs_spfli-fltime TO gs_list-fltime,
gs_spfli-deptime TO gs_list-deptime.
<MOVE-CORRESPONDING 구문>
MOVE-CORRESPONDING gs_spfli TO gs_list.
동일
해야 한다.<받는 필드> = <주는 필드>
연산자
를 사용한다.MOVE <주는 필드> TO <받는 필드>
달라
도 된다.MOVE-CORRESPONDING <주는 WA> TO <받는 WA>
INTO CORRESPONDING FIELDS OF
와 비슷한 개념
SELECT ~ CORRESPONDING FIELDS OF
+ TABLE
+ 테이블(ITAB)명
SELECT SINGLE ~ CORRESPONDING FIELDS OF
+ WA(변수)명
MOVE-CORRESPONDING
MOVE-CORRESPONDING <주는 테이블> TO <받는 테이블>
테이블(ITAB)명
WA(변수)명
MOVE-CORRESPONDING <주는 테이블> TO <받는 테이블> KEEPING TARGET LINES.
gt_data_bak[] = gt_data[]. "헤더가 있고, 인터널테이블 사이에 구조가 똑같을 때 사용
gt_data_bak = gt_data.
APPEND LINES OF gt_data TO gt_data_bak. "모든 라인들에 데이터 추가하기.
MOVE-CORRESPONDING gt_data[] TO gt_data_bak[]. "헤더가 있고, 인터널테이블 사이에 구조가 다를 때 사용
MOVE-CORRESPONDING gt_data TO gt_data_bak. "필드를 찾아가서 모든 라인들을 덮어쓰기.
MOVE-CORRESPONDING gt_data TO gt_data_bak KEEPING TARGET LINES. "필드를 찾아가서 모든 라인들을 덮어쓰되 이전 데이터를 보존하기.
* 1)
DATA : BEGIN OF gs_print,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
planetype TYPE sflight-planetype,
url TYPE scarr-url,
END OF gs_print,
* 2)
gt_print LIKE TABLE OF gs_print,
gs_fli LIKE gs_print,
gt_fli LIKE TABLE OF gs_print.
CLEAR : gs_print.
REFRESH : gt_print, gt_fli.
SELECT a~carrid a~carrname a~url
b~connid b~fldate b~price b~currency b~planetype
INTO CORRESPONDING FIELDS OF TABLE gt_fli
FROM scarr AS a
INNER
JOIN sflight AS b
ON a~carrid EQ b~carrid
WHERE a~carrid IN ('AA', 'UA', 'QF').
IF sy-subrc NE 0.
WRITE : 'Data not found'.
STOP.
ENDIF.
* 3)
LOOP AT gt_fli into gs_fli.
IF gs_fli-currency EQ 'AUD'
OR gs_fli-planetype EQ 'A380-800'.
gs_fli-currency = 'KRW'.
MOVE-CORRESPONDING gs_fli TO gs_print.
APPEND gs_print to gt_print.
CLEAR gs_print.
ENDIF.
ENDLOOP.
BREAK-POINT.