我只是想问一下,它是否建议在Oracle EBS Concurrent Program中调用PL / SQL过程中的一个提交?由于以下原因,我一直认为将提交置于程序中是不好的做法:
- 如果程序在提交后遇到异常,我们就不能再将其回滚。
- 让调用应用程序执行隐式提交(在本例中为EBS)
- 与Oracle Workflows一样,我们永远不应该将Commits放在WF包中,因为它会破坏“回滚”功能。 工作流程。
醇>
但是,我继续看到Oracle EBS Developers将提交置于单个并发程序中。有什么想法吗?
谢谢!
答案 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