카테고리 없음

ABAP 신문법 - Read

SEO_Joon 2025. 11. 5. 10:01

*&---------------------------------------------------------------------*
*& 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.