oracle行級觸發器操作 觸發表 數據 處理方法(oracle 子事務自治 pragma autonomous_transaction)

create or replace trigger iam_storage_useY_update_tr
  after update of use_y, manager_no on IAM_STORAGE
  for each row
declare
  num number;
  --子事務自治 不影響 主 事務
  pragma autonomous_transaction;
  -- local variables here
  --IAM重要物資 倉庫 DIR信息變更時 old.manager_no  when ((old.use_y = 'Y' and new.use_y = 'N') or new.manager_no != '')
  --從有效到無效修改時 或 DIR信息變更時  並判斷當前系統是否仍存在 有效 修改前的DIR信息(old.manager_no)
  -- 仍存在 不做處理; 否 其對應的 DIR對應關係 全部修改為 無效
begin
  select count(1)
    into num
    from iam_storage a
   where a.use_y = 'Y'
     and a.manager_no = :old.manager_no;
  --commit;
 /* DIR信息修改 且 原DIR信息在系統中只存在一個 */
  if num <= 1 and :old.manager_no != :new.manager_no then
    update iam_storage_window w
       set w.is_ny = 'N'
     where w.dir_no = :old.manager_no;
    --commit;
    update iam_storage_window_supervisor s
       set s.is_ny = 'N'
     where s.kid in (select w.kid
                       from iam_storage_window w
                      where w.dir_no = :old.manager_no);
    --commit;
  end if;
  /*DIR信息刪除 且 原DIR信息在系統中只存在一個*/
  if num <= 1 and :old.use_y = 'Y' and :new.use_y = 'N' then
    update iam_storage_window w
       set w.is_ny = 'N'
     where w.dir_no = :old.manager_no;
    --commit;
    update iam_storage_window_supervisor s
       set s.is_ny = 'N'
     where s.kid in (select w.kid
                       from iam_storage_window w
                      where w.dir_no = :old.manager_no);
    --commit;
  end if;
  commit;
end iam_storage_useY_update_tr;

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值