建议将Commit放入Oracle EBS并发程序中吗?

时间:2016-10-25 19:48:14

标签: sql oracle plsql concurrency oracle-ebs

我只是想问一下,它是否建议在Oracle EBS Concurrent Program中调用PL / SQL过程中的一个提交?由于以下原因,我一直认为将提交置于程序中是不好的做法:

  
      
  1. 如果程序在提交后遇到异常,我们就不能再将其回滚。
  2.   
  3. 让调用应用程序执行隐式提交(在本例中为EBS)
  4.   
  5. 与Oracle Workflows一样,我们永远不应该将Commits放在WF包中,因为它会破坏“回滚”功能。   工作流程。
  6.   

但是,我继续看到Oracle EBS Developers将提交置于单个并发程序中。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

别担心,你做对了。 数据库开发人员在生产中燃烧之前不会发现很多事情。 在代码中避免使用COMMIT是为了使这个代码能够与其他代码单元一起使用,而不会破坏整个系统逻辑。 回滚不仅涉及异常,还涉及用户在交互式程序中取消操作的自由,而不会破坏数据库。

以下是一个开发人员( unit_2 的开发者)可以自由使用COMMIT时会发生什么的示例。

create table t (i int);
create or replace procedure unit_1 as begin insert into t(i) values (1); end;
/
create or replace procedure unit_2 as begin insert into t(i) values (2); commit; end;
/
create or replace procedure unit_3 as begin insert into t(i) values (3); end;
/
create or replace procedure unit_4 as begin insert into t(i) values (4); end;
/
create or replace procedure all_units as begin delete t;unit_1;unit_2;unit_3;unit_4; end;
/
exec all_units;

select * from t;
         I
----------
         1
         2
         3
         4
set transaction t; exec all_units; rollback;


select * from t;
         I
----------
         1
         2