안녕하세요. 초급 질문입니다.
Selection Screen에서 몇가지의 검색 조건을 입력을 받습니다.
그리고 이것을 서브루틴을 통해서 결과값을 출력합니다.
구성한 selection screen에서 조건값이 5개중, 입력하지 않은 값에 대한
sql where절이 어떻게 처리가 되나요?
기존에 조건값이 없으면 where절을 무시하고 나머지 조건에 대해서 처리하는줄 알았는데,
이 부분의 오류로 데이터를 불러오질 못하네요.
*-Selection- Screen
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : p_plnum LIKE plaf-plnum,
p_matnr LIKE plaf-matnr.
SELECT-OPTIONS : s_pertr FOR plaf-pertr DEFAULT sy-datum.
PARAMETERS : p_dispo LIKE plaf-dispo,
p_paart LIKE plaf-paart DEFAULT 'LA'.
SELECTION-SCREEN END OF BLOCK b1.
*--Subroutine
FORM select_data.
SELECT *
INTO CORRESPONDING FIELDS OF wa
FROM plaf
WHERE plnum = p_plnum
AND matnr = p_matnr
AND pertr IN p_pertr
AND dispo = p_dispo
AND paart = p_paart.
IF wa-ststa = '01'.
wa-ststa1 = '@08@'. "Active
ELSEIF wa-ststa = '00'.
wa-ststa1 = '@0A@'. "InActive
ENDIF.
APPEND wa TO it_01.
ENDSELECT.
IF sy-subrc NE 0.
MESSAGE i001 WITH '해당 Data가 없습니다.'.
ENDIF.
ENDFORM.
예를 들어 p_matnr의 조건값을 입력하지 않고 조회했을 경우 데이터 조회가 안됩니다.(나머지 4개값은 정상적으로 입력)
디버깅을 해도 아무런 값을 들고오지 않는데 왜 이런 오류가 발생하는지 혹시 같은 경험하신분이 조언 부탁드릴게요.
matnr = p_matnr 처럼 Parameters는 값이 안들어오면 쿼리가 되지 않습니다
pertr IN p_pertr 처럼 select-options 로 받은 변수를 In으로 조건 처리할 경우는 값이 안들어와도 상관이 없습니다.
이럴경우 동적 Where 절을 사용해도 되지만 저는 Parameters를 사용하지 않고
select-options 뒤에 no interval no-extension을 사용하여 파라미터 처럼 사용하여 in 으로 처리를 합니다.