본문 바로가기
🧑‍💼 SAP/ABAP

[SAP ABAP] MODIFY 란?

by Jay Din 2023. 10. 5.
728x90
반응형

MODIFY

Modify문은 Update와 Insert를 합한 기능으로 키값을 가지고 있는 데이터가 테이블에 존재하면 변경하고 없으면 삽입합니다.

DBTAB(DB테이블) 삽입과 수정 모두 가능
ITAB(인터널 테이블) 수정만 가능
반응형

 

사용형식

MODIFY itab [FROM wa] [INDEX idx] [TRANSPORTING f1 ... fn].

Index를 가지는 테이블에 대하여 사용할 수 있습니다.

itab f1, f2, f3 modify 시킬 itab 필드명
wa(구조체) wa를 기술하면 wa의 내용 처리,
wa를 기술하지 않으면 Header의 내용 처리
idx Idx를 기술하면 Idx 라인 변경
TRANSPORTING transport를 기술하면 기술되어 있는 필드들만 수정

 

문법: DBTAB

MODIFY DBTAB FROM Data_to_Modify_DBTAB.

FROM 절

  • Data_to_Modify_DBTAB은 반드시 DBTAB과 같은 필드 구성을 가진 WA 혹은 ITAB이어야 합니다.
  • DBTAB의 키를 이용해 Data_to_Modify_DBTAB의 데이터가 이미 DBTAB에 존재하는지 식별해 존재하면 수정하고, 존재하지 않는 경우엔 삽입합니다.
  • Data_to_Modify_DBTAB이 ITAB인지, 혹은 WA인지에 따라 다음과 같이 FROM절을 다르게 작성해야 합니다.
1. WA : ... FROM WA.
2. ITAB: ... FROM TABLE ITAB.
728x90

문법: ITAB

MODIFY ITAB FROM WA TRANSPORTING Name_of_Field_to_Modify Modify_Record_Option

FROM 절

  • Data_to_Modify_ITAB은 반드시 ITAB과 같은 필드 구성을 가진 WA 혹은 ITAB이어야 합니다.
  • 만약 ITAB이 Header Table이고, 헤더를 이용해 바디를 수정하는 경우라면 FROM절을 생략할 수 있습니다.

TRANSPORTING 절

  • ITAB의 특정 필드만 바꾸고 싶을 때 사용합니다.
  • 바꾸고 싶은 필드가 2개 이상일 때는 띄어쓰기를 이용해 Name_of_Field_to_Modify를 구분합니다.

Modify Reord Option

  • Data_to_Modify_ITAB을 이용해 ITAB의 어떤 레코드를 수정할지 명시합니다.
    • 적지 않아도 문법 검사에서 통과되지만 LOOP문 밖에서 적지 않고 실행했을 경우엔 런타임 에러가 발생하니 주의해야 함.
하나의 레코드만 변경: ... INDEX Index_of_Record_to_Modify ...
여러 레코드 변경: ... TRANSPORTING Clause WHERE Condition_to_Modify ...
  • WHERE 절
    • 하나의 WA로 동시에 여러 레코드를 바꿀 때 사용할 수 있습니다. 단 이땐 TRANSPORTING절을 반드시 사용해야 합니다.
  • INDEX 절
    • LOOP문 내부에서 LOOP를 진행하고 있는 ITAB을 대상으로 MODIFY문을 실행할 때는 생략할 수 있으며, 생략 시 'INDEX SY-TABIX'로 적용됩니다.

 

 


참고

https://moon-7.tistory.com/50

https://seollal.tistory.com/503

728x90
반응형