我只是想问一下是否建议将提交放入由 Oracle EBS 并发程序调用的 PL/SQL 过程中?我一直认为将提交放入程序中是不好的做法,原因如下:
- 如果程序在 Commit 之后遇到异常,我们就不能再回滚了。
- 让调用应用程序执行隐式提交(在本例中为 EBS)
- 与 Oracle 工作流的情况一样,我们不应该将提交放在 WF 包中,因为它会破坏工作流的“回滚”功能。
但是,我不断看到 Oracle EBS 开发人员将提交放在单个并发程序中。对此有什么想法吗?
谢谢!
我只是想问一下是否建议将提交放入由 Oracle EBS 并发程序调用的 PL/SQL 过程中?我一直认为将提交放入程序中是不好的做法,原因如下:
- 如果程序在 Commit 之后遇到异常,我们就不能再回滚了。
- 让调用应用程序执行隐式提交(在本例中为 EBS)
- 与 Oracle 工作流的情况一样,我们不应该将提交放在 WF 包中,因为它会破坏工作流的“回滚”功能。
但是,我不断看到 Oracle EBS 开发人员将提交放在单个并发程序中。对此有什么想法吗?
谢谢!
别担心,你做对了。数据库开发人员在投入生产之前并不知道很多事情。在代码中避免 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