728x90
# SAP SELECT(SQL) 동적 시작하기 전
# SQL에서 사용을 할 때 동적으로 조건을 설정해주어야 할 때가 있다.
# 조건을 설정하기 위해서는 동적 조건을 받을 변수와 동적으로 변경되는 값을 설정해야 한다.
동적으로 줄 때에는 크게 3가지로 나뉜다.
- PARAMETER
- SELECT-OPTIONS
- 변수
# 시나리오
# PARAMETER와 SELECT-OPTIONS에 대한 동적 조건을 만들어보겠다.
# 01. 동적으로 받을 조건 설정
# 01. 우선 사용자 입력을 하기 위해 다음과 같이 설정해 보자.

TABLES: SFLIGHT.
PARAMETERS:
PA_ID TYPE SFLIGHT-CARRID.
SELECT-OPTIONS:
SO_DATE FOR SFLIGHT-FLDATE.
# 02. 동적 조건을 설정하기 위해서는 다음과 같이 [ Internal Table ] or [ Structure ] 설정해야 한다.

DATA:
GS_WHERE(20),
GT_WHERE LIKE TABLE OF GS_WHERE.
#02. Where 동적 조건 만들기
#01. 조건을 만들기 위해서는 Concatenate문을 통해서 설정해야 한다.
( 여기서는 New Syntax을 통해서 설명하겠다. Old Syntax는 예시로만 들겠다 )
# Old Syntax 설명
# Old Syntax으로 설정하면 다음과 같이

CONCATENATE 'CARRID = '''PA_CAID'''' INTO GS_WHERE. " Old Syntax
예를 들어
PA_CAID에 값을 AA로 넘었다고 하면 다음과 같이 나올 것이다.

# CONCATENATE을 이런 식으로 설정한 이유는
Concatenate안에 변수를 넣으려면
'변수' -> 이런 식으로 넣어야 한다
( # 따옴표 ' ' 두 개를 사용해서 안에 변수를 넣어주는 방식. )

# 빨간 상자를 지워보자.
남은 건 'CARRID =' ' ' 이다.
더욱 쉽게 보면 'CARRID ='AA' ' 인 것이다.
CONCATENATE를 사용하면서 변수가 아닌 문자를 써주려면 따옴표가 감싸줘야 하기 때문에 처음 시작부터 사용을 하였다.
마지막으로 보면 결과 값은
CARRID ='AA'이다.
이렇게 되면 완성인 것이다.
# New Syntax 설명
# 01. New Syntax으로 설정하면 다음과 같이 설정할 수 있다.

GS_WHERE = |CARRID = '{ PA_CAID }' |.
#03. Where 동적 조건 PERFORM 설정
# 하지만 우리가 봐야 할 것은 Parameter 일 경우, 연산자가 계속 바뀔 경우도 있기도 하고, 필드가 바뀔 수도 있기 때문에 그것 또한 동적으로 설정해야 한다.
# 또한, SELECT-OPTIONS은 Parameter와 다르게 설정을 해야지만, Dump을 막을 수가 있다.
그래서 다음과 같이 로직을 설정하였다. ( 로직 설명은 안 하겠.. 다..! )

FORM DYNAMIC_WHERE
TABLES
PT_WHERE LIKE GT_WHERE
USING
VALUE(P_SEL) " Parameter or Select-Options "
VALUE(P_FIELD)
VALUE(P_CONDIT) " ex) EQ, NE, GT, LE ... "
VALUE(P_VALUE).
IF GT_WHERE IS INITIAL.
CASE P_SEL.
WHEN SPACE.
GS_WHERE = |{ P_FIELD } { P_CONDIT } '{ P_VALUE }'|.
WHEN ABAP_TRUE.
GS_WHERE = |{ P_FIELD } IN { P_VALUE }|.
ENDCASE.
ELSE.
GS_WHERE = 'AND'.
APPEND GS_WHERE TO GT_WHERE.
CASE P_SEL.
WHEN SPACE.
GS_WHERE = |{ P_FIELD } { P_CONDIT } '{ P_VALUE }'|.
WHEN ABAP_TRUE.
GS_WHERE = |{ P_FIELD } IN { P_VALUE }|.
ENDCASE.
ENDIF.
APPEND GS_WHERE TO GT_WHERE.
CLEAR
GS_WHERE.
ENDFORM. "DYNAMIC_WHERE
# 로직에서 중요한 것은 Parameter냐? Select-Options냐? 의 차이점이게 된다.
# SELECT-OPTIONS일 경우에만 앞에 ' X ' 값만 넣어주면 된다.

PERFORM DYNAMIC_WHERE
TABLES
GT_WHERE:
USING
' ' 'CARRID' 'EQ' PA_ID,
USING
'X' 'FLDATE' '' 'SO_DATE[]'.
# Parameter 일 경우

# Select-Options 일 경우

# [ GT_WHERE ] 값

# OPEN SQL 사용 시, 추가적인 상황( HANA 기준으로 설명 )
# 예를 들어 Parameter가 아닌 Select-Options을 넣어야 할 때가 있을 것이다.
동적으로 Parameter을 넣을 경우에는 다음과 같이 넣으면 되고,

GS_WHERE = |CARRID = '{ PA_CAID }' |.
동적으로 Select-Options으로 넣을 경우에는 다음과 같이 넣으면 된다.

GS_WHERE = |{ P_FIELD } IN @{ P_VALUE }|.
# 여기서 주의할 점은 7.40 버전 이후를 사용할 경우 [ @ ]을 사용해야 하기 때문에 다음과 같이 설정해야 덤프 발생이 안된다.

끝..!!
도움이 되셨으면 하단에 있는 광고 한 번씩 눌러주세요!!
728x90
'.ABAP > ..모든 것' 카테고리의 다른 글
| SAP TRY .. CATCH 구문 (3) | 2022.05.03 |
|---|---|
| SAP Tabstrip 정리( Screen ) (6) | 2022.04.15 |
| SAP Query [2] 정리 (0) | 2022.03.26 |
| SAP Query [1] 정리 (1) | 2022.03.20 |
| SAP MACRO,DEFINE 정리 (2) | 2022.02.16 |