如何将组事务提交到 oracle 中的存储过程
Posted
技术标签:
【中文标题】如何将组事务提交到 oracle 中的存储过程【英文标题】:How to commit group transaction to a stored procedure in oracle 【发布时间】:2019-10-02 16:14:05 【问题描述】:我有一个将数据插入表的过程,并在最后有一个提交语句。它提交对过程的每次调用并插入数据。
create or replace procedure abc
begin
insert stmt;
commit;
end;
现在,我想知道是否有一种方法可以通过事务(组事务)结束时的过程将多个插入提交到表中。这意味着,我不想在每次调用过程时(从前端)都提交,但是在多次调用过程之后,我需要提交。
【问题讨论】:
你如何执行那个过程? 【参考方案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,可以是任何可以建立数据库连接的进程。
【讨论】:
【参考方案2】:尝试创建带参数的过程。该参数可以采用以下值:Y 或 N(或您需要的方式),并根据该值,您将提交或不提交。
例子:
create or replace procedure abc (commit_y_n varchar2) as
begin
insert stmt;
if abc.commit_y_n == 'Y' then
commit;
end;
【讨论】:
以上是关于如何将组事务提交到 oracle 中的存储过程的主要内容,如果未能解决你的问题,请参考以下文章