更正:
第二个存储过程:
create or replace procedure BBB(v_A varchar2)
is
  v_B varchar2(64);
begin
  v_C := 'AAAA';  delete from TAB_A a where a.bz_code = 'A';
  COMMIT;
  insert into TAB_A(COL1,COL2) VALUES('A','B');
commit;
  update TAB_A a set a.COL3 = 'AAA';
commit;
  update TAB_B a set C.COL1 = 'AAA';  commit;  exception
  when others then
  rollback;
end BBB;首先问beckhambobo:
你是说第一个不存在分析?存不存在分析对执行效率有很大的原因吗?
可不可以讲的详细一些,谢谢。在问 dinya2003:
问什么第二种不能实现数据的一致性?
我是在同一个存储过程中实现插入和更新,如果不提交,将会锁表,不会有其他用户更改数据的,所以数据应该是同步的。
哪一个会比较好一些?

解决方案 »

  1.   

    偶习惯这样写:create or replace procedure BBB(v_A varchar2)
    is
      v_B varchar2(64);
    begin
      v_C := 'AAAA';  delete from TAB_A a where a.bz_code = 'A';  insert into TAB_A(COL1,COL2) VALUES('A','B');  update TAB_A a set a.COL3 = 'AAA';  update TAB_B a set C.COL1 = 'AAA';  commit;  exception
      when others then
      rollback;
    end BBB;
      

  2.   

    赞成第一种写法,原因如dinya2003(OK) 
    在你执行的四步操作中,后三步的任何一步在执行的过程中如果出现异常,都将执行异常处理部分,虽然异常处理部分执行了回滚,但是此回滚却不能将第一条已经执行的操作回滚.,也就是说,如果出现了异常,无法判断系统执行到了哪一步.
      

  3.   

    肯定是第一个,第2个事务处理不对(COMMIT时机不对)
    不过一般写法如 zw_yu(鱼猫) 所言,除非你有特殊处理