我有一个包正在为作业位置和位置表执行不同的插入和更新。例如:
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_table,xx_pos_tl_table和xx_pos_extra的数据。但是应该执行其余的块(作业和位置)。
答案 0 :(得分:3)
如果发生如下异常,请为rollback to创建一个保存点:
---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