我有一个将数据插入表中并在末尾具有commit语句的过程。它将对过程的每次调用提交并插入数据。
create or replace procedure abc
begin
insert stmt;
commit;
end;
现在,我想知道是否有一种方法可以通过事务(组事务)结束时的过程向表提交多个插入。这意味着,我不想每次都从前端调用该过程,但是在多次调用该过程后,我需要将其提交。
答案 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;