加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – 在Function / Procedure中进行DML操作后是否需要提交

发布时间:2020-12-12 13:10:41 所属栏目:百科 来源:网络整理
导读:我想知道在函数/过程中插入/删除/更新后是否有必要编写提交? 例: create or replace function test_funreturn number isbegin delete from a; return 0;end; 或程序 create or replace procedure aud_clear_proasbegin delete from a;end; 删除后是否需要
我想知道在函数/过程中插入/删除/更新后是否有必要编写提交?

例:

create or replace function test_fun
return number is
begin
   delete from a;
   return 0;
end;

或程序

create or replace procedure aud_clear_pro
as
begin
   delete from a;
end;

删除后是否需要提交?

无法理解以下情况:

>如果我从SQL窗口调用函数/过程,则需要提交


>如果我使用dbms_scheduler计划函数/过程并运行作业,则会自动提交delete语句.

为什么?

通常,程序不应该提交.那些类型的事务控制决策应该留给更高级别的代码,这些代码知道逻辑事务何时实际完成.如果您在存储过程内部提交,则限制其可重用性,因为希望程序所做的更改成为更大事务的一部分的调用者不能直接调用该过程.

如果以交互方式调用过程,则必须显式提交或回滚事务,因为Oracle不知道您是否希望过程调用是逻辑事务,或者是否打算组成涉及多个过程调用的较大事务.如果使用dbms_scheduler,则dbms_scheduler假定作业是逻辑事务,并在作业结束时提交,假设它成功(dbms_job执行相同的操作).

函数不应该首先操纵数据.无法从SQL语句中调用操作数据的函数(除非声明函数本身使用几乎从不合适的自治事务的极端情况).拥有这两个函数和过程的关键在于函数可以嵌入到SQL语句中,并且可以更自由地授予用户,因为它们不会更改任何数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读