오늘은 인터널 테이블 MODIFY 구문에 대해 한번 알아보겠습니다.
(MODIFY의 사용 목적)
MODIFY문은 크게 두 가지의 유형의 테이블에 데이터를 삽입 또는 변경할 때 사용합니다.
첫 번째로는 티코드 SE11 즉, ABAP DICTIONARY에 존재하는 Database Table에 값을 삽입 또는 변경할 때. |
두 번째로는 소스코드에서 생성한 인터널 테이블의 값을 삽입 또는 변경해 줄 때 사용합니다. |
(MODIFY의 기능)
키 값으로 테이블 데이터를 확인해서 존재한다면 데이터 값을 수정하고, 데이터가 존재하지 않는다면 데이터를 삽입해주는 INSERT를 수행하는 효율적인 구문입니다. |
그래서 많은 개발자들이 MODIFY구문을 사용합니다.
기존에 데이터가 있다면 수정해주고 없다면 넣어주기 때문에 개발하기 굉장히 편리하죠.
(MODIFY구문 사용처)
인터널 테이블의 값을 변경하기 위해서 modify를 사용하는 경우엔 주로 아래와 같이 2가지 측면에서 많이 사용됩니다.
1. ALV LIST에 뿌려 줄 데이터를 가공하는 작업에서 많이 사용하고
2. 필드카탈로그를 만들 때 사용합니다.
(오늘 실습 할 인터널 테이블 MODIFY에 대한 간략한 설명)
LOOP안에서 인터널테이블을 수정하는 MODIFY 구문만 짚고 넘어가겠습니다.
인터널 테이블 MODIFY 구문 사용의 90퍼센트 이상은 LOOP안에서 사용되며 MODIFY를 이해하기에 좋은 구문이기 때문입니다.
필드카탈로그 만들어 줄 때나 ALV에 뿌려 줄 인터널 테이블을 가공할 때에도 LOOP안에서 MODIFY문을 수행합니다.
인터널 테이블을 선언할 때 primary key, secondary key를 사용하여 modify 하는 경우, index를 활용하여 modify 하는 경우
where 조건 절을 사용하여 modify 하는 경우들이 존재하지만 그건 일부분의 경우이며 잘 사용하지도 않고
어려울 수 있어 추후에 심화 과정 포스팅을 업로드 할 때 다루도록 하겠습니다.
따라서 LOOP안에서 MODIFY하는 것. 이것만 알고 계셔도 아밥 프로그래밍을 하는데 정말 큰 도움이 됩니다.
LOOP 밖에서 MODIFY 구문을 수행할 때는 방법이 좀 다르기 때문에 일단은 LOOP안에서 MODIFY하는 것 부터 차근차근 진행하겠습니다.
초급분들이 자주 덤프내는 LOOP 내부에서 MODIFY하는 방법을 같이 공부해보시죠!
인터널 테이블을 MODIFY하는데 있어선 크게 두 가지로 나뉩니다.
첫번째. 헤더라인이 있는 인터널 테이블. 두번째. 헤더라인이 없는 인터널 테이블. |
어떻게 다른지 한번 보시죠.
(LOOP안에서 MODIFY를 수행할 때 사용하는 구문)
MODIFY '인터널테이블' FROM '스트럭처' |
(예시)
여기서 중요한건 인터널 테이블과 스트럭처의 컬럼이 완전히 동일해야 합니다.
하나라도 다르면 오류가 발생합니다.
즉, 인터널 테이블 LT_SFLIGHT에 컬럼이 1, 2, 3, 4가 있다면 LS_SFLIGHT 스트럭처의 컬럼도 똑같이 1, 2, 3, 4가 있어야합니다.
(소스코드)
(소스코드 해석)
헤더라인과 인터널 테이블의 개념을 먼저 알면 좋습니다.
먼저 헤더라인과 인터널 테이블에 대해 공부하고 오시면 이해하기가 더욱 수월합니다.
(하단 링크 참고)
https://arartexixi.tistory.com/39
헤더라인과 인터널 테이블
오늘은 인터널 테이블의 헤더라인에 대해 한번 알아보겠습니다. 헤더라인은 곧 스트럭처를 말합니다. 즉, 헤더라인이 있는 인터널 테이블은 인터널 테이블 안에 스트럭처를 별도로 하나 가지고
arartexixi.tistory.com
먼저 헤더라인이 없는 인터널 테이블을 보겠습니다.
헤더라인(스트럭처)이 인터널 테이블안에 존재하지 않으니 별도로 LS_SFLIGHT라는 스트럭처를 선언하여
LOOP구문에서 읽은 인터널 테이블의 라인1개의 값을 LS_SFLIGHT 스트럭처에 복사해줍니다.
후에 MODIFY 구문을 통해 CARRID가 'AA'인 컬럼은 PRICE를 '100.00'으로 변경하여 다시 LT_SFLIGHT 테이블에 변경된 값을 복사해줍니다.
아래를 한번 보시죠.
LT_SFLIGHT에서 먼저 LS_SFLIGHT에 값을 복사한 후에 LS_SFLIGHT의 PRICE컬럼을 변경하였습니다.
LS_SFLIGHT 스트럭처에서 값을 변경한다고 해도 LT_SFLIGHT 인터널 테이블의 값이 변경되지 않습니다.
따라서 MODIFY 구문을 통해 값이 바뀐 스트럭처를 다시 인터널 테이블에 복사해줘야 합니다.
그 다음 헤더라인이 존재하는 인터널 테이블 사용시 MODIFY구문과 LOOP문이 어떻게 다른지 보겠습니다.
헤더라인이 있는 인터널 테이블과 동일한 로직이지만 조금 다르죠???
헤더라인이 있는 인터널 테이블은 말그대로 헤더라인(스트럭처)를 인터널 테이블 내부에 포함하고 있어서 별도로
스트럭처를 선언할 필요가 없습니다.
MODIFY가 가능한 이유가 뭘까요??
인터널테이블 내부적으로 몇번째 행 LOOP를 돌고있는지 알고 있어서 복사해준 스트럭처를 다시 인터널 테이블에 반영시켜도 현재 LOOP가 돌고 있는 행의 데이터가 수정되는 구조입니다.
감사합니다.
'- SAP ABAP 기초부터 시작하기' 카테고리의 다른 글
SAP ABAP 기초 4-8) MODIFY FROM TABLE (0) | 2023.02.27 |
---|---|
SAP ABAP 기초 4-7) MODIFY의 이해(DB 테이블) (0) | 2022.12.27 |
SAP ABAP 기초 4-5) APPEND 구문 이해하기 (0) | 2022.12.09 |
SAP ABAP 기초 4-4) MOVE-CORRESPONDING 이해하기 (0) | 2022.12.09 |
SAP ABAP 기초 4-3 ) 데이터 가공 3 - FOR ALL ENTRIES IN (0) | 2022.12.05 |