首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >建议在Oracle EBS并发程序中提交?

建议在Oracle EBS并发程序中提交?
EN

Stack Overflow用户
提问于 2016-10-25 19:48:14
回答 1查看 1K关注 0票数 3

我只想问一下,是否应该在Oracle并发程序调用的PL/SQL过程中添加一个Commit?我一直认为在程序中提交提交是错误的做法,原因如下:

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

但是,我一直看到Oracle EBS开发人员将提交放在一个并发程序中。对此有什么想法吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-25 20:23:29

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

下面是一个例子,说明当一个开发人员(unit_2的开发人员)获得使用提交的自由时会发生什么。

代码语言:javascript
运行
复制
create table t (i int);
代码语言:javascript
运行
复制
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;
/
代码语言:javascript
运行
复制
create or replace procedure all_units as begin delete t;unit_1;unit_2;unit_3;unit_4; end;
/
代码语言:javascript
运行
复制
exec all_units;

select * from t;
代码语言:javascript
运行
复制
         I
----------
         1
         2
         3
         4
代码语言:javascript
运行
复制
set transaction t; exec all_units; rollback;


select * from t;
代码语言:javascript
运行
复制
         I
----------
         1
         2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40248501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档