ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ABAP] READ 구문 정리
    ABAP 2023. 10. 31. 23:37

    *Result

    SY-SUBRC = 0 “동일하다
    SY-SUBRC = 2 “값이 다르다
    SY-SUBRC = 4 “해당 조건으로는 인터널테이블 내 데이터가 없다
    

    1. 기본 READ 구문

    : 원하는 데이터를 찾고자 할 때 READ 사용.

    READ TABLE <ITAB> FROM <WA> (INTO RESULT

    [EX]

    DATA : GS_STUDENT TYPE ZEDT17_001.
    DATA : GS_STUDENT LIKE TABLE OF GS_STUDENT.
    
    DATA : BEGIN OF GS_MAJOR,
    	ZCODE  LIKE ZEDT17_001-ZCODE,
    	ZPERNR LIKE ZEDT17_001-ZPERNR,
    	ZMNAME LIKE ZEDT17_001-ZMNAME,
    	END OF GS_MAJOR.
    DATA : GT_MAJOR LIKE TABLE OF GS_MAJOR.
    
    CLEAR : GS_STUDENT,GT_STUDENT,GS_MAJOR,GT_MAJOR.
    
    GS_STUDENT-ZPERNR = '00000000001'.
    ...
    APPEND GS_STUDENT TO GT_STUDENT.
    
    GS_MAJOR-ZPERNR = '00000000001'.
    GS_MAJOR-MNAME = '경영학과'.
    ...
    APPEND GS_MAJOR TO GT_MAJOR. "각자 다른 인터널테이블에 데이터 입력 
    
    LOOP AT GT_STUDENT INTO GS_STUDENT.
    	CLEAR : GS_MAJOR.
    	MOVE-CORRESPONDING GS_STUDENT TO GS_MAJOR.
    	READ TABLE GT_MAJOR FROM GS_MAJOR INTO GS_MAJOR.
    
    	IF ST-SUBRC = 0.
    		WRITE :/ GS_STUDENT-ZCODE, GS_STUDENT-ZKNAME, GS_MAJOR-ZMNAME.
    						"loop 한번만 돌려도 서로 다른 2개의 인터널테이블의 데이터를 출력 가능
    	ELSE.
    		WRITE :/ '데이터를 가져오지 못했습니다'.
    	ENDIF.
    ENDLOOP.
    
    

    2. TABLE KEY

    READ TABLE <ITAB> WITH TABLE KEY 조건 (INTO RESULT)
    

    [EX]

    DATA : GS_STUDENT TYPE ZEDT17_001.
    DATA : GS_STUDENT LIKE TABLE OF GS_STUDENT.
    
    DATA : BEGIN OF GS_MAJOR,
    	ZCODE  LIKE ZEDT17_001-ZCODE,
    	ZPERNR LIKE ZEDT17_001-ZPERNR,
    	ZMNAME LIKE ZEDT17_001-ZMNAME,
    	END OF GS_MAJOR.
    DATA : GT_MAJOR LIKE TABLE OF GS_MAJOR WITH NON-UNIQUE KEY ZCODE.
    
    '' 
    
    LOOP AT GT_STUDENT INTO GS_STUDENT.
    	CLEAR : GS_MAJOR.
    	READ TABLE GT_MAJOR WITH TABLE KEY ZCODE = GS_STUDENT-ZCODE.
    	INTO GS_MAJOR.
    
    	IF ST-SUBRC = 0.
    		WRITE :/ GS_STUDENT-ZCODE, GS_STUDENT-ZKNAME, GS_MAJOR-ZMNAME.
    	ELSE.
    		WRITE :/ '데이터를 가져오지 못했습니다'.
    	ENDIF.
    ENDLOOP.
    

    3. WORK AREA 할당

    1) 기본

    LOOP AT GT_STUDENT INTO GS_STUDENT.
    	CLEAR : GS_MAJOR.
    	
    	READ TABLE GT_MAJOR WITH KEY ZCODE = GS_STUDENT-ZCODE 
    															 ZPERNR = GS_STUDENT-ZPERNR
    	INTO GS_MAJOR.
    
    	IF ST-SUBRC = 0.
    		WRITE :/ GS_STUDENT-ZCODE, GS_STUDENT-ZKNAME, GS_MAJOR-ZMNAME.
    	ELSE.
    		WRITE :/ '데이터를 가져오지 못했습니다'.
    	ENDIF.
    ENDLOOP.
    

    2) comparing

    : READ 구문 수행 결가를 WORK AREA로 할당하는 구문

    → 진짜 있는 데이터인지 확인하는 것

     LOOP AT GT_STUDENT INTO GS_STUDENT.
    	CLEAR : GS_MAJOR.
    	MOVE-CORRESPONDING GS_STUDENT TO GS_MAJOR.
    
    	READ TABLE GT_MAJOR WITH KEY ZCODE = GS_STUDENT-ZCODE INTO GS_MAJOR
    	COMPARING ZCODE.
    
    	IF ST-SUBRC = 0.
    		WRITE :/ GS_STUDENT-ZCODE, GS_STUDENT-ZKNAME, GS_MAJOR-ZMNAME.
    	ELSE.
    		WRITE :/ '데이터를 가져오지 못했습니다'.
    	ENDIF.
    ENDLOOP.
    

    3) transporting

    : READ한 결과를 해당 칼럼만 타겟에 저장

     LOOP AT GT_STUDENT INTO GS_STUDENT.
    	CLEAR : GS_MAJOR.
    	MOVE-CORRESPONDING GS_STUDENT TO GS_MAJOR.
    
    	READ TABLE GT_MAJOR WITH KEY ZCODE = GS_STUDENT-ZCODE INTO GS_MAJOR
    	TRANSPORTING ZMNAME.
    
    	IF ST-SUBRC = 0.
    		GS_STUDENT-ZKNAME = GS_MAJOR-ZKNAME.
    		WRITE :/ GS_STUDENT-ZCODE, GS_STUDENT-ZKNAME, GS_MAJOR-ZMNAME.
    	ELSE.
    		WRITE :/ '데이터를 가져오지 못했습니다'.
    	ENDIF.
    ENDLOOP.
    

    4. INDEX (거의 사용 X)

     LOOP AT GT_STUDENT INTO GS_STUDENT.
    	CLEAR : GS_MAJOR.
    	MOVE-CORRESPONDING GS_STUDENT TO GS_MAJOR.
    
    	READ TABLE GT_MAJOR INTO GS_MAJOR INDEX SY-TABIX.
    
    	IF ST-SUBRC = 0.
    		WRITE :/ GS_STUDENT-ZCODE, GS_STUDENT-ZKNAME, GS_MAJOR-ZMNAME.
    	ELSE.
    		WRITE :/ '데이터를 가져오지 못했습니다'.
    	ENDIF.
    ENDLOOP.
    

    5. READ BINARY SEARCH

    : Read Table 시 데이터를 빠르게 찾아내기 위해 사용

    LOOP 안에서 인터널테이블 READ시 FULL SCAN → 성능 저하

    이진탐색 알고리즘 기법을 통해 search

    *SORT 로 데이터 정렬 후 search

    [EX]

    SORT GT_STUDENT BY ZCODE.
    SORT GT_MAJOR BY ZCODE.
    
    LOOP AT GT_STUDENT INTO GS_STUDENT.
    	CLEAR : GS_MAJOR.
    	MOVE-CORRESPONDING GS_STUDENT TO GS_MAJOR.
    
    	READ TABLE GT_MAJOR WITH KEY ZCODE = GS_STUDENT-ZCODE INTO GS_MAJOR BINARY SEARCH. 
    
    	IF ST-SUBRC = 0.
    		WRITE :/ GS_STUDENT-ZCODE, GS_STUDENT-ZKNAME, GS_MAJOR-ZMNAME.
    	ELSE.
    		WRITE :/ '데이터를 가져오지 못했습니다'.
    	ENDIF.
    ENDLOOP.
    

    'ABAP' 카테고리의 다른 글

    [ABAP] Subscreen 생성하기  (0) 2024.01.23
    [ABAP] Executable Program vs Module Pool Program  (0) 2024.01.18
    [ABAP] Change Request + Package 생성하기  (0) 2023.12.29
    [ABAP] TABLE 생성하기  (1) 2023.11.20
    [ABAP] DB TABLE 정리하기(1)  (0) 2023.10.31
Designed by Tistory.