在plsql中执行其余块的同时回滚整个块

在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;

我有一个软件包,它正在为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;

  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-好的。。。试图理解保存点的概念。将让您知道这是否有效:)