如何将组事务提交到oracle中的存储过程
How to commit group transaction to a stored procedure in oracle
我有一个将数据插入 table 并在末尾有一个提交语句的过程。它提交对过程的每次调用并插入数据。
create or replace procedure abc
begin
insert stmt;
commit;
end;
现在,我想知道是否有一种方法可以通过事务(组事务)结束时的过程向 table 提交多个插入。这意味着,我不想每次调用该过程(从前端)时都提交,但在多次调用该过程后我需要提交它。
尝试创建带参数的过程。该参数可以采用以下值:Y 或 N(或您需要的方式),并根据该值决定是否提交。
示例:
create or replace procedure abc (commit_y_n varchar2) as
begin
insert stmt;
if abc.commit_y_n == 'Y' then {
commit;
}
end;
一起从过程中删除提交。将其移动到调用进程。例如:
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,它可以是任何可以建立数据库连接的进程。
我有一个将数据插入 table 并在末尾有一个提交语句的过程。它提交对过程的每次调用并插入数据。
create or replace procedure abc
begin
insert stmt;
commit;
end;
现在,我想知道是否有一种方法可以通过事务(组事务)结束时的过程向 table 提交多个插入。这意味着,我不想每次调用该过程(从前端)时都提交,但在多次调用该过程后我需要提交它。
尝试创建带参数的过程。该参数可以采用以下值:Y 或 N(或您需要的方式),并根据该值决定是否提交。
示例:
create or replace procedure abc (commit_y_n varchar2) as
begin
insert stmt;
if abc.commit_y_n == 'Y' then {
commit;
}
end;
一起从过程中删除提交。将其移动到调用进程。例如:
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,它可以是任何可以建立数据库连接的进程。