4개의 테이블이 있는데 순차적으로 모디파이 해줍니다.
a테이블 모디파이 후 sy-subrc가 0 이면 b, c , d순으로 저장합니다.
그런데 중간에 오류가 나서 모디파이가 실패하면
처음했던 테이블까지 쭈욱 순차적으로 올라가면서 롤백이 가능한가요?
한테이블이라도 모디파이가 안되면 다 롤빽되게 해야되서요.
진정한 초보에게 고수님들의 조언을 부탁드립니다.
MODIFY table_A FROM TABLE wa_table_a.
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
MODIFY table_b FROM TABLE wa_table_b.
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
MODIFY table_c FROM TABLE wa_table_c.
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
MODIFY table_d FROM TABLE wa_table_d.
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
댓글 3
-
양키
2011.01.29 01:28
-
꼽사리
2011.01.31 20:02
SET UPDATE TASK LOCAL 문법을 이용하시면 됩니다. -
ABAPCHOJJA
2011.02.07 23:50
* 흠.. 그냥 이렇게 하면 되지 않을까요?
MODIFY TABLE_A FROM TABLE WA_TABLE_A.
IF SY-SUBRC <> 0.
ROLLBACK WORK. EXIT.
ENDIF.
MODIFY TABLE_B FROM TABLE WA_TABLE_B.
IF SY-SUBRC <> 0.
ROLLBACK WORK. EXIT.
ENDIF.
MODIFY TABLE_C FROM TABLE WA_TABLE_C.
IF SY-SUBRC <> 0.
ROLLBACK WORK. EXIT.
ENDIF.
MODIFY TABLE_D FROM TABLE WA_TABLE_D.
IF SY-SUBRC <> 0.
ROLLBACK WORK. EXIT.
ENDIF.
COMMIT WORK.
* 코드를 좀 정리하면 다음처럼 어떠신지....
DEFINE LMAC_MODIFY_TABLE .
MODIFY &1 FROM TABLE &2.
IF SY-SUBRC <> 0.
ROLLBACK WORK. EXIT.
ENDIF.
END-OF-DEFINITION.
LMAC_MODIFY_TABLE : TABLE_A WA_TABLE_A,
TABLE_B WA_TABLE_B,
TABLE_C WA_TABLE_C,
TABLE_D WA_TABLE_D.
COMMIT WORK AND WAIT.
commit & rollback 구문은 맨하단에만 정의하시구요.
각각의 테이블 modify 이후 별도의 변수에다가 sy-subrc = 0 이 아니면 값을 넣어주세요.
그리고 맨 마지막에 그값이 들어와있다면 rollback 시키면 될듯합니다.
예를들어 아래와같이...
Modify A
if sy-subrc ne 0.
tmp_val = 'X'.
endif.
Modify B
if sy-subrc ne 0.
tmp_val = 'X'.
endif.
Modify C
if sy-subrc ne 0.
tmp_val = 'X'.
endif.
if tmp_val = X.
rollback work.
else.
commit work.
endif.