언제쯤 이런기초적인 질문을 안올려도 될지 ... 죄송합니다
제목그대로 if문안에서 commit work rollback work 구문개념좀 부탁드려요
그리고 제가 잘몰라서 그러는데 안써줘도 될것같은데 쓰는 이유는 뭔지좀 알려주세요
댓글 4
-
SAP폐인
2008.08.14 01:13
if문과는 상관없지 않나요? DB쪽과 관련된걸로 아는데욥 -
보나
2008.08.15 01:17
....
MODIFY dbtab.
IF SY-SUBRC = 0.
commit work.
ELSE.
message e000 with '데이터저장중 에러가 발생하였습니다'.
rollback work.
ENDIF.
DB 의 insert / modify / delete / update 등의 처리 후에
위와 비슷한 로직이 들어있는 경우는,
데이터를 잘 넣었으면 commit work 시키고, 그렇지 않은 경우에는 rollback work 을 시키는 경우를 말씀하시는건가요?
(하나의) DB 작업시에는 commit work 전에 작업한 내용에 대해서는 rollbank work 시에 수행작업에 대한 취소(?)를 합니다만;
-
보나
2008.08.15 01:28
음 예를 들어 설명을 하자면,
실제 DBTABLE 'A' 가 있고
'A' 테이블에는 키필드가1개(CHAR1자리)이고 이 필드이름이 'AA' 라고 했을 경우.
A 테이블에 데이터를 조회해 보니 '1' 이라는 데이터가 들어있다고 가정했을 경우.
프로그램에서
internal 테이블에 데이터를 담아 이 데이터들을 A 테이블에 insert (modify/delete/update) 하려고 할 경우.
internal 테이블 (itab) 은 A 테이블과 같은 구조를 가지고 있고,
담겨진 데이터가 순서대로 2,3,1 이라고 할 경우
insert 시에 마지막 '1' 값은 이미 DB 에 key 로 존재하므로 insert 되지 못합니다.
commit work 만 사용하거나, 아니면 commit work/rollback work 구문을 둘다 사용하지 않은 경우에는
테이블 A 에는 itab 의 2,3 값은 넣어지나 마지막 1 값은 중복되므로 DB에 들어가지 않게 됩니다.
rollbank work 만 사용한 경우에는 itab 에서 넣으려는 2,3,1 값이 전부 DB에 들어가지 않게 됩니다.
rollbank work / commit work 을 같이 사용한 경우에는 commit work 을 수행한 이후 부터의 데이터가 DB 에 저장되지 않게됩니다....
테스트 프로그램을 하나 수행시켜 보시면,
그 차이점을 보다 쉽게 아실 수 있으리라 생각되네요 ^^
-
신동욱
2009.07.22 19:57
완벽한 답변에 감탄을 금할길이 없다는....ㅠ