ABAP LOOP AT 사용법 및 예제 등

인터널 테이블에 담겨있는 각각의 아이템을 돌면서 로직을 처리할 때 많이 사용되는 ABAP LOOP AT 사용법 및 예제를 정리해 보았습니다. LOOP AT 키워드는  특히 DB에서 값을 가져온 후 일반적으로 많이 사용되는 명령어로써 꼭 숙지해야 할 키워드입니다.

ABAP LOOP는 인터널 테이블을 차례대로 순차적으로 순회하며 처리하는 반복 구문입니다. 인터널 테이블을 돌면서 아이템(=Work Area 혹은 Field-Symbol)에 할당하며 순차적으로  처리합니다.

SAP ABAP LOOP AT 사용법 및 예제 정리

ABAP LOOP AT ~ INTO 구문

INTO 구문은 인터널 테이블과 동일한 스트럭처 형태의 변수 워크에어리어에 값을 할당한 후 LOOP 안에서 사용합니다.

INTO 구문의 경우 따로 변수에 담아(=복사) 연산하기 때문에 연산이 끝난 마지막에는 MODIFY를 통해 다시 인터널 테이블로 반영해 주어야 합니다.

DATA : LS_SFLIGHT TYPE SFLIGHT.
SELECT *
FROM SFLIGHT
INTO TABLE @DATA(LT_SFLIGHT).

SELECT *
FROM SCARR
INTO TABLE @DATA(LT_SCARR).

LOOP AT LT_SFLIGHT INTO LS_SFLIGHT.

    *     do Something.
    MODIFY LT_SFLIGHT FROM  LS_SFLIGHT.

ENDLOOP.

ABAP LOOP AT ~ ASSIGNING 구문 활용하기

ASSIGINING은 변수 대신 필드 심볼에 할당 한 후 LOOP 내부에서 사용합니다.

필드 심볼 방식은 변수 공간을 만들어 복사하는 과정이 없고 바로 주소(Reference) 참조로 접근하기에  속도 개선 효과가 큽니다.

또 따로 변수 공간을 만들어 처리하는 것이 아닌 주소 참조 방식으로 ENDLOOP 전 마지막에 modify 처리를 할 필요 없습니다.

FIELD-SYMBOLS: <FS_FIELD> TYPE ANY.

LOOP AT LT_SFLIGHT ASSIGNING <FS_FIELD> WHERE CONNID = 'AA'.
    *     do Something.
ENDLOOP.

LOOP AT ~ WHERE 조건 반복 하기

인터널 테이블에 WHERE 키워드를 통해 조건에 충족하는 레코드만 불러와서 처리할 수 있습니다. 즉, WHERE 다음에 나오는 조건에 충족하는 대상만 반복하게 됩니다.

LOOP AT LT_SFLIGHT ASSIGNING <FS_FIELD> WHERE CONNID = 'AA'.
    *     do Something.
ENDLOOP.

ABAP LOOP AT ~ FROM 시작 인덱스 TO 마지막 인덱스 : From 인덱스에서 To 인덱스까지만 가져오기

현재 정렬 상태를 기준으로 FROM 인덱스 부터 TO 인덱스 까지의 데이터만 반복하여 처리합니다.

그렇기 때문에 현재 인터널 테이블이 어떤 기준으로 정렬되어 있는지 중요합니다. 따라서 LOOP AT 구문을 사용하기 전에는 버릇처럼 SORT 먼저 생각하는 것이 좋습니다.

SORT LT_SFLIGHT BY CONNID.

FROM, TO 키워드는 각각 단독으로 쓰일 수 있고 함께 사용될 수도 있습니다.

LOOP AT LT_SFLIGHT ASSIGNING 
FROM 1 TO 10.
*     do Something.
ENDLOOP.

LOOP AT ~ TRANSPORTING NO FIELDS : 아무것도 복사하지 않고 체크만!

TRANSPORTING NO FIELDS 는 반복은 하되 변수나 필드 심볼에 할당하지 않습니다. 따라서 LOOP 내부에서 값을 활용할 수 없고, 아래와 같이 존재하는지 여부 등에서 사용됩니다.

LOOP AT LT_SFLIGHT TRANSPORTING NO FIELDS WHERE CONNID = 'AA'. .
ENDLOOP.

IF SY-SUBRC EQ 0.
    // 체크 
ENDIF.

TRANSPORTING NO FIELDS 구문은 변수에 할당하는 것보다 복사과정이 생략되므로 속도에 이점이 있습니다. 단순 존재 여부 체크 시에는 TRANSPORTING NO FIELDS를 사용하여 속도를 높이는 것이 좋습니다.

이는 READ TABLE 구문에서도 사용되는 옵션 키워드이므로 함께 확인 해보시기 바랍니다. 이 글 ABAP READ TABLE 사용법 및 예제 정리 글에서 TRANSPORTING NO FIELDS 항목을 참고해 보시기 바랍니다.

이상으로 ABAP LOOP AT 사용법 및 예제 등을 알아보았습니다. 상세한 내용은 SAP ABAP 7.5 공식 레퍼런스 LOOP AT 항목을 참고해 보시기 바랍니다.

참고하면 좋은 SAP ABAP 키워드 활용법

ABAP Collect 사용법 및 예제
ABAP CONCATENATE 사용법 및 예제 정리