쌓고 쌓다
[ABAP] WHERE 조건절 STRING으로 동적으로 구성하기 본문
상황
싱크 교육을 들으며 강사님께 WHERE절, FROM절을 다음과 같이
STRING으로 구성할 수 있다는 이야기를 들은적이 있다.
DATA : LV_WHERE TYPE STRING.
SELECT * FROM ... WHERE (LV_WHERE).
이것이 언제 쓰이는지
필요할 것 같지 않았다.
하지만 다음의 요구사항을 받았다고하자.

생성, 승인, 완료 선택에 따라 데이터를 가져오는 조건이 달라졌으면 좋겠어요.
뭐 RANGE VARIABLE을 사용해서 추가해주면 되지 않을까? 싶었다.
스펙서를 보자.

JEST-STAT, JEST-INACT 두개의 필드가 & 연산자로 묶여있기때문에
하나의 필드에 대해서만 || 연산자로 묶는 RANGE VARIABLE은 적용할 수 없다.
그래서 사용자가 선택한 조건에 맞춰
STRING을 동적으로 구성하여 조건절에 추가하는 방법이 필요한 것이다.

위처럼 조건문을 구성할 수 있다.
테이블을 명시하는 FROM이나 조인절에
AS 구문으로 테이블명과 동일한 별칭을 작성했다.
STRING으로 구성할때 테이블의 별칭을 넣어 줄 수 있다.
방법
생성, 승인, 완료 각 조건이 아래의 WHERE 조건문을 사용한다고하자.
생성(CRTD) : JEST-STAT = 'I0001' & JEST-INACT IS INITIAL
승인(REL) : JEST-STAT = 'I0002' & JEST-INACT IS INITIAL
완료(TECO) : JEST-STAT = 'I0045' & JEST-INACT IS INITIAL
위의 조건들을 SQL WHERE 구문으로 STRING 구성한다.

위의 상황처럼 상태 관련 WHERE 조건문을 상황에 따라 여러개 필요로 할 수 있으므로
Internal Table에 STRING들을 담아둔다.

상태를 OR 조건으로 조건문을 구성하길 원하므로
CONCATENATE 구문으로 Internal Table에 담긴 STRING들을 ' OR '로 연결한다.
다른 조건문들과 섞여 부작용을 방지하고자 ( )로 다시 묶는 과정이 필요하다.
STRING으로 조건문을 구성했을때 STRING이 비어있으면
항상 참이 되는 조건문이 된다.
그러나
생성, 승인, 완료 모두 선택하지 않았을때 어떠한 결과도 나오면 안되는 상황이기에
Internal Table이 비어있다면 거짓이 되는 조건문을 넣어주었다.

위처럼 STRING으로 까다로운 WHERE 조건문을 구성하여 넣을 수 있다.
혹시 아래의 사진처럼 조건들을 STRING으로 구성하지 않고
조건절을 적용할 수 있는 방법이 있다면
댓글로 알려주시길 바랍니다..

'SAP > ABAP' 카테고리의 다른 글
| [ABAP] 사용자 파라미터 (사용자 마스터 매개변수 ID) 테이블 (0) | 2025.12.21 |
|---|---|
| [ABAP] 매크로 DEFINE 구문 (3) | 2025.12.14 |
| Primary, Secondary Key와 WITH TABLE KEY, WITH KEY 차이점 (0) | 2025.11.15 |
| [ABAP] 피오리 GET_STREAM과 SMW0 엑셀 템플릿에 값을 넣고 응답하기 (0) | 2025.11.11 |
| Internal Table 종류와 Binary Search, OCCURS 0 구문 (0) | 2025.11.04 |