흠...맞는 대답인지 잘 모르겠지만 (허접한 저이기에...ㅡㅡ;;) 제 생각에는 두가지 경우에 대해서 생각해봐야할거 같은데여...
우선 사용하신 Loop내의 내용중에 혹시 OCIExecute()함수가 있는지 가 궁금하구여..
만일 이 함수를 사용하셨다면 두번째 인자가 커밋모드에 관한 것인데 생략시엔 디폴트로 OCI_COMMIT_ON_SUCCESS입니다. 즉, SQL시행후 성공시 바로 커밋해버리는 것입니다.
두번째로는 만약에 위의 경우가 아니라면 Loop구문 자체가 Exit의 효과가 있는거 같군여..
실제로 예를 들어 SQL구문은 실행시킨후 커밋을 실행하지 않더라도 OCILogOff()가 실행되면 자동으로 커밋이 된다든지 SQL*PLUS에서 sql문 실행후 바로 exit로 빠져나오면 자동커밋이 되므로 님께서 작성하신 while구문도 같은 효과가 있은듯 하네염.
>>신동환 님께서 쓰시길<<
:: <?
:: //php와 oracle8i코딩시
::
:: $conn = OCILogon("$db_id","$db_password","$db_sid");
::
:: while Loop {
::
:: insert or update or delete문장
::
:: if (비정상인경우) {
:: OCIRollback($conn);
:: exit;
:: }
::
:: }
::
:: OCICommit($conn);
:: OCILogoff($conn);
:: ?>
::
:: 저는 해당transaction이 정상적으로 완료된 후 프로그램 종료시
:: commit(); 으로 정의를 내렸습니다.
:: 그런데 while loop안에의 DML(insert,delete,update)문장이 즉각적으로 오라클
:: 테이블에 반영되는것을 보았습니다.
:: 이해가 안되어 이렇게 질의를 올립니다.
::
::
|