REDUCE
축소 연산자
ABAP New syntax 중 하나인 REDUCE 구문 입니다.
단순한 집계 같은 경우 LOOP 보다 사용이 간편하고 성능도 우수하다 합니다.
# 사용 예시
SELECT
*
FROM T001
INTO TABLE @DATA(LT_TMP).
" 기존 LOOP SUM 구문
DATA LV_CNT TYPE I VALUE 0.
LOOP AT LT_TMP INTO DATA(LS_TMP) WHERE XTEMPLT EQ SPACE.
LV_CNT += 1.
ENDLOOP.
WRITE:/ LV_CNT.
CLEAR LV_CNT.
" REDUCE 를 이용한 COUNT
LV_CNT = REDUCE I( INIT X = 0
FOR LS IN LT_TMP
WHERE ( XTEMPLT EQ SPACE )
NEXT X += 1 ).
WRITE:/ LV_CNT.
" RESUCE 를 이용한 String template
DATA(LV_STR1) = REDUCE STRING( INIT TXT = `CHAR`
FOR LS IN LT_TMP
WHERE ( XTEMPLT EQ SPACE )
NEXT TXT &&= | { LS-BUKRS }| ).
CONDENSE LV_STR1.
WRITE:/ LV_STR1.
DATA(LV_STR2) = REDUCE STRING( INIT TXT = `CHAR`
FOR N = 1 UNTIL N > 10
NEXT TXT &&= | { N }| ).
CONDENSE LV_STR2.
WRITE:/ LV_STR2.
" ABAP DOCU의 예제 소스
cl_demo_output=>new(
)->next_section( 'Summation'
)->write( REDUCE i( INIT sum = 0
FOR n = 1 UNTIL n > 10
NEXT sum = sum + n )
)->next_section( 'Concatenation without THEN'
)->write( REDUCE string( INIT text = `Count up:`
FOR n = 1 UNTIL n > 10
NEXT text &&= | { n }| )
)->next_section( 'Concatenation with THEN'
)->write( REDUCE string( INIT text = `Count down:`
FOR n = 10 THEN n - 1 WHILE n > 0
NEXT text &&= | { n }| )
)->next_section( 'Non arithmetic expression'
)->write( REDUCE string( INIT text = ``
FOR t = `x` THEN t && `y`
UNTIL strlen( t ) > 10
NEXT text &&= |{ t } | )
)->display( ).
'ABAP > Syntax' 카테고리의 다른 글
[OpenSQL] OpenSQL Expressions (0) | 2023.07.19 |
---|---|
[OpenSQL] Internal Table을 이용한 JOIN (FOR ALL ENTRIES 대체) (0) | 2023.07.18 |
[Syntax] VALUE - structure 와 internal table에 값 할당 (0) | 2023.07.18 |
[Syntax] COND, SWITCH 문 (SQL의 case문과 유사) (0) | 2023.07.18 |
[Syntax] Internal Table 레코드 수 및 Read table 구문 (0) | 2023.07.18 |
댓글