在plsql中执行其余块的同时回滚整个块
我有一个软件包,它正在为job position和location表执行不同的插入和更新。类似于:在plsql中执行其余块的同时回滚整个块,plsql,oracle-sqldeveloper,rollback,Plsql,Oracle Sqldeveloper,Rollback,我有一个软件包,它正在为job position和location表执行不同的插入和更新。类似于: Create or replace package body pack_name as procedure proc as ----Posistion Block Begin Begin insert into xx_pos_table select * from xx_i_pos_table; exception when others then end;
Create or replace package body pack_name
as
procedure proc
as
----Posistion Block
Begin
Begin
insert into xx_pos_table
select *
from xx_i_pos_table;
exception when others then
end;
Begin
insert into xx_pos_tl_table
select * from xx_i_pos_tl_table;
exception when others then
end;
Begin
Update xx_pos_extra
set err_msg =Null
exception when others then
end;
end;
---Job block
Begin
Update xx_job_extra
set err_msg =Null
exception when others then
end;
-- Loc block
Begin
Update xx_loc_extra
set err_msg =Null
exception when others then
end;
end;
end;
现在我想知道,如果在位置块中,例如在xx_pos_extra中插入数据时出现错误,那么只应回滚位置块,并且不应输入xx_pos_表、xx_pos_tl_表和xx_pos_extra中的数据。但是其余的块(作业和位置)应该执行 创建保存点,以便在出现如下异常时:
---Job block
begin
SAVEPOINT p_rollback;
Update xx_job_extra
set err_msg =Null
exception when others then
rollback to p_rollback;
end;
-- Loc block
如果发生以下异常,请创建保存点:
---Job block
begin
SAVEPOINT p_rollback;
Update xx_job_extra
set err_msg =Null
exception when others then
rollback to p_rollback;
end;
-- Loc block
我没有抓住你。您说过不应同时输入来自xx_pos_表、xx_pos_tl_表和xx_pos_extra的数据,但应执行其余块。
xx_pos_tl_表
和xx_pos_extra
插入的不是其余的块吗?@agent5566感谢您的更正。。。我已经编辑了我的问题。我的意思是作业和职位块应该执行xx_job_extra,xx_location应该更新。您应该将您的职位块包装在保存点中,并在异常情况下回滚到它block@agent5566-好的。。。试图理解保存点的概念。我会让你知道这是否有效:)我没有抓住你。您说过不应同时输入来自xx_pos_表、xx_pos_tl_表和xx_pos_extra的数据,但应执行其余块。xx_pos_tl_表
和xx_pos_extra
插入的不是其余的块吗?@agent5566感谢您的更正。。。我已经编辑了我的问题。我的意思是作业和职位块应该执行xx_job_extra,xx_location应该更新。您应该将您的职位块包装在保存点中,并在异常情况下回滚到它block@agent5566-好的。。。试图理解保存点的概念。将让您知道这是否有效:)