如何将组事务提交到Oracle中的存储过程

时间:2019-05-15 13:33:27

标签: oracle plsql transactions commit

我有一个将数据插入表中并在末尾具有commit语句的过程。它将对过程的每次调用提交并插入数据。

create or replace procedure abc
begin 
  insert stmt;
  commit;
end;

现在,我想知道是否有一种方法可以通过事务(组事务)结束时的过程向表提交多个插入。这意味着,我不想每次都从前端调用该过程,但是在多次调用该过程后,我需要将其提交。

2 个答案:

答案 0 :(得分:1)

一起从过程中删除提交。将其移至调用过程。例如:

Create or replace procedure procedure abc(p1 varchar2, p2 ...)
is
begin
    insert ....
end abc; 

然后,调用过程变为:

begin 
    for vars in (select c1, c2, ... from tab)
    loop
       ....
       abc(vars.v1, vars.c2, ...);
   end loop; 

   COMMIT;  -- only when transaction is complete;
end ; 

注意;调用过程不必一定是plsql,它可以是可以建立数据库连接的任何东西。

答案 1 :(得分:0)

尝试使用参数创建过程。该参数可以采用以下值:Y或N(或您需要的方式),并根据该值进行提交或不提交。

示例:

create or replace procedure abc (commit_y_n varchar2) as
begin 
insert stmt;
if abc.commit_y_n == 'Y' then {
commit;
}
end;