ABAP에서 DELETE itab WHERE~ 구문을 쓰다가 두가지 조건을 제외하고 모두 DELETE해주고싶은 경우가 생겼다.
데이터를 보면서 예를 들면,
SELECT CARRID,
CONNID,
COUNTRYFR,
CITYFROM,
AIRPFROM,
COUNTRYTO,
CITYTO,
AIRPTO
FROM SPFLI
INTO TABLE @DATA(GT_SPFLI).
SORT GT_SPFLI BY CARRID.
위와같이 SELECT를 해서 값이 담긴 인터널 테이블 GT_SPFLI 의 데이터가 아래와 같을때,
CARRID = 'AA' 인것과 CARRID = 'DL' 인것을 제외하고 모두 지워주고 싶다.
해결방법 #1. WHERE 조건에 괄호 ( ) 이용해서 조건 여러개 주기.
DELETE GT_SPFLI WHERE ( CARRID NE 'AA' ) AND ( CARRID NE 'DL' ).
이렇게 써주면 된다!
디버깅을 통해 테이블에 담긴 데이터를 확인해보면 원하는 CARRID = 'AA' , CARRID = 'DL' 값만 남아있는걸 확인할 수 있다.
![](https://blog.kakaocdn.net/dn/TQFll/btsj3nCr7CD/BTWiLKx7OGox6VmwY3xI91/img.png)
사실 WHERE 조건을 AND로 안주고 (바보같이) OR로줘서... 어 왜 데이터가 다 지워지지???? 이러면서 헤맸다..
DELETE GT_SPFLI WHERE ( CARRID NE 'AA' ) AND ( CARRID NE 'DL' ).
DELETE GT_SPFLI WHERE ( CARRID NE 'AA' ) OR ( CARRID NE 'DL' ).
위의 두 줄을 그림을 그려서 이해해보면 아래와 같고!
( CARRID NE 'AA' ) AND ( CARRID NE 'LH' ).
는 초록색에 해당하고
( CARRID NE 'AA' ) OR ( CARRID NE 'DL' )
는 초록색, 노란색, 빨간색을 다 합친색에 해당한다.
그래서 OR 조건을 주면 모든 데이터가 다 지워지는게 맞음. (그것도 모르고 두번째 방법으로 해결한다음에 포스팅하면서 깨달음..)
해결방법 #2. WHERE 조건에 RANGE변수 이용.
두번째 방법은 (첫번째 방법에 뭔가 문제가 있는줄알고..) 두개의 조건을 RANGE변수에 넣어준다음, 'RANGE변수에 해당하지 않는것만 지워준다' 로 조건을 주면 되겠군 하고 짰던 로직.
RANGES R_CARRID FOR SPFLI-CARRID.
R_CARRID-SIGN = 'I'.
R_CARRID-OPTION = 'EQ'.
R_CARRID-LOW = 'AA'.
APPEND R_CARRID. CLEAR R_CARRID.
R_CARRID-SIGN = 'I'.
R_CARRID-OPTION = 'EQ'.
R_CARRID-LOW = 'DL'.
APPEND R_CARRID.
DELETE GT_SPFLI WHERE CARRID NOT IN R_CARRID.
RANGE변수 R_CARRID에 CARRID = 'AA' , CARRID = 'DL' 두 조건을 넣어주고
이 조건에 해당하지 않으면 지워주는 방식.
디버깅해서 보면,
R_CARRID에는 두 조건이 담겨있다.
그리고 DELETE진행하면
1번방법으로 했을때와 똑같이 5건만 남아있는것 확인 가능하고,
GT_SPFLI 더블클릭하면!
이렇게 원하는 데이터만 남아있는것 확인 가능하다!
조건줄때 생각을 더 깊게 해보자..!!
끝.
'ABAP' 카테고리의 다른 글
[SAP_ABAP] 유지보수 뷰 이벤트 생성 시 'Statement is not accessible.' 오류 (0) | 2023.08.14 |
---|---|
[SAP_ABAP] REUSE_ALV_GRID_DISPLAY에서 GET_SELECTED_ROWS 처럼 다중 선택한 열 정보 얻는 방법! (1) | 2023.06.19 |
[SAP_ABAP] 메세지 구문 안에 작은따옴표(')넣어주고 싶을 때 (0) | 2023.06.14 |
[SAP_FI]T-CODE BP에서 FI고객 [국가 고유의 인핸스먼트] 탭 데이터 담겨있는 테이블 정보 찾기 (0) | 2023.06.12 |
[SAP_ABAP] The column name "XXXX" is ambiguous ABAP/4 Open SQL statement. (1) | 2022.11.04 |