Q&A

  • 오라클 프로시져를 실행하면 롤백이 안되는 문제점에 대해서...
Try
    F_DMBugok.Bugok.StartTransaction;
    *********
        
    if  Copy(m_Result,1,2) <> '00' then    //정상 처리가 안 되었으면...
       F_DMBugok.Bugok.Rollback;
    else
       F_DMBugok.Bugok.Commit;
    end;

except
    F_DMBugok.Bugok.Rollback;
end;


소스는 대충 이런데 "******" 한 부분에 오라클 프로시져를 Call하는 부분이 있습니다.
물론 프로시져 내부에서도 다른 테이블을 commit 하고 rollback 하는 부분이 있습니다. 이 프로시져 만 쓰면 에러가 발생해도 RollBack 이 안됩니다.

고수님들의 답변 부탁 립니다.
1  COMMENTS
  • Profile
    nilriri™ 2003.11.05 10:18
    트랜젝션 처리를 굳이 델파이쪽에서 해야할 필요가 있나요?

    mResult라는 리턴값을 어떻게 받어오는건지 모르겠지만..

    이부분도 잘 이해가 가지 않네요..ㅡㅡ;

    제 생각엔 ******* 부분에 여러개의 프로시져를 실행하기 때문에..

    이렇게 하신거 같은데..

    차라리..한개의 프로시져에서 모두 처리할수 있도록 하시는게 좋을거 같습니다.

    그리고 프로시져 안에서 commit이나 rollback이 있다면..

    F_DMBugok.Bugok.StartTransaction;이 부분에 대한 commit이 그 안에서

    이루어지리라 생각이 드는데요..

    savepoint라는것도 있습니다. (참고하시구요..)

    프로시져 에서 에러를 발생시켜서 프로시져의 리턴결과에 오류를 발생시키고자 하신다면 프로시져 상에서 raise_application_error인가 하는 오라클 함수가 있습니다.

    이걸 이용하시면 될것같습니다.

    raise_application_error(errorcode, message);


    이렇게 사용하시면..

    프로시져를 호출한 델파이 내부에서.

    try
        ....
        ......
    except
        on e : exception do
        begin
           showmessage(e.message);
        end;
    end;

    이렇게 하시면..  오라클 프로시져 내부에서 발생한 에러 메시지를 화면상에서
    뿌려 주실수 잇습니다.