*&---------------------------------------------------------------------*
*& ITAB READ
*&
*& 인터널 테이블 READ 구문이 편리하게 사용 가능하게 되었습니다.
*&---------------------------------------------------------------------*
DATA(IDX) = 0. "인덱스
"테스트 데이터
SELECT EBELN,
EBELP,
TXZ01,
MATNR,
MENGE,
BRTWR
INTO TABLE @DATA(GT_DATA)
FROM EKPO
UP TO 100 ROWS.
DATA : GS_DATA LIKE LINE OF GT_DATA.
IDX = 2.
*&---------------------------------------------------------------------*
"기존문법 1
* READ TABLE GT_DATA INTO GS_DATA INDEX IDX.
"신규문법 1
*DATA(GS_DATA1) = GT_DATA[ IDX ].
*&---------------------------------------------------------------------*
"기존 문법 2
" 조건에 맞는 데이타 가져오기
*READ TABLE GT_DATA INTO GS_DATA WITH KEY EBELN = '4500000460'.
"신규문법 2
*DATA(GS_DATA2) = GT_DATA[ EBELN = '4500000460' ].
"표현은 간편해졌으나, 값이 존재하지 않으면 Short Dump 발생.
"TRY CATCH 문으로 에러 잡아야 함.
*TRY.
*
* DATA(GS_DATA3) = GT_DATA[ EBELN = '1111111111' ].
* CATCH CX_SY_ITAB_LINE_NOT_FOUND INTO DATA(LX_HANDLER).
* WRITE |존재하지 않는 전표번호 입니다.|.
*
*ENDTRY.
"참고 ) 조건에 맞는 값이 있으면 LX_HANDLER는 INITIAL이 됨
*&---------------------------------------------------------------------*
"기존 문법 - 3
"TRANSPORTING은 읽은 데이터를 WORK AREA에 담을 때 전체 또는 선택한 필드
"값만 가져올 수 있다.
"NO FIELD 옵션은 WORK AREA에 값은 담지 않고 조건에 맞는 데이터가
"있는지만 볼때 주로 사용한다.
"TRANSPORTING NO FIELDS
"TRANSPORTING ALL FIELDS
"TRANSPORTING 필드1 필드2.....
*READ TABLE GT_DATA INTO GS_DATA WITH KEY EBELN = '4500000460'
* TRANSPORTING NO FIELDS.
*
*IF SY-SUBRC = 0.
*
*ENDIF.
"신규 문법 - 3
*IF LINE_EXISTS( GT_DATA[ EBELN = '4500000460' ] ).
*
* WRITE / : '데이터가 있습니다.'.
*
*
*ENDIF.
*&---------------------------------------------------------------------*
"기존 문법 - 4
*READ TABLE GT_DATA INTO GS_DATA WITH KEY EBELN = '4500000461'
* EBELP = '10'
* TRANSPORTING NO FIELDS.
*
*IDX = SY-TABIX.
"신규 문법 - 4
*IDX = LINE_INDEX( GT_DATA[ EBELN = '4500000461' EBELP = '10' ] ).
*&---------------------------------------------------------------------*
"기존 문법 - 5.
TYPES : BEGIN OF T_S_DATA,
ID TYPE CHAR4,
NAME TYPE CHAR6,
VALUE(5) TYPE I,
END OF T_S_DATA.
TYPES : T_T_DATA TYPE TABLE OF T_S_DATA WITH KEY ID.
"신규 문법 - 5.
DATA(LT_DATA) = VALUE T_T_DATA(
( ID = '0001' NAME = 'HELLO1' VALUE = 100 )
( ID = '0002' NAME = 'HELLO2' VALUE = 200 )
( ID = '0003' NAME = 'HELLO3' VALUE = 300 )
( ID = '0004' NAME = 'HELLO4' VALUE = 400 )
).
DATA(LV_NAME) = LT_DATA[ ID = '0001' ] .
"결과 -> STRUCTURE TYPE으로 ID = '0001' NAME = 'HELLO1' VALUE = 100.
DATA(LV_NAME2) = LT_DATA[ ID = '0001' ]-NAME .
"결과 -> HELLO1
DATA(LV_ID) = LT_DATA[ NAME = 'HELLO3' ].
"결과 -> STRUCTURE TYPE으로 ID = '0003' NAME = 'HELLO3' VALUE = 300.
DATA(LV_ID2) = LT_DATA[ NAME = 'HELLO3' ]-ID.
"결과 -> 0003
DATA(LV_ID3) = LT_DATA[ 2 ]-NAME.
"결과 -> HELLO2
BREAK-POINT.