北京华夏安泰技术论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需要一步,快速开始

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 368|回复: 0

用触发器校验数据逻辑缺陷

[复制链接]

148

主题

203

帖子

1096

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1096
发表于 2017-10-11 18:20:59 | 显示全部楼层 |阅读模式
在指标金额扣减过程中出现有超出预算值的情况,但目前又不能复原,这时用触发器来校验数据逻辑关系。
如果数据关系不对则抛出错误到前台,业务回滚。

  1. CREATE OR REPLACE TRIGGER CHECK_INNER_BUDGET
  2.   after update
  3.   ON BUDGET_INNER_BUDGET
  4.   for each row
  5. declare
  6. ---定义异常
  7.   exce1 exception;   
  8.   exce2 exception;
  9.   exce3 exception;
  10.   exce4 exception;

  11. begin
  12. /*

  13. 用于内批指标防止超支校验

  14. */
  15. IF :new.fund_source <> '1' then
  16.        RETURN;
  17. end  if;

  18.     IF :new.OCCUPIED_AMOUNT > :new.RELEASE_AMOUNT then  --累计占用
  19.        raise exce1;                               --引发异常
  20.     end if ;
  21.    
  22.     IF :new.PAYOUT_AMOUNT > :new.RELEASE_AMOUNT then    --实际支出
  23.        raise exce2;                               --引发异常
  24.     end if ;
  25.    
  26.     IF :new.OCCUPIED_AMOUNT + :new.AVAIL_AMOUNT <> :new.RELEASE_AMOUNT then    --可用+占用 <> 总金额
  27.        raise exce3;                               --引发异常
  28.     end if ;

  29.     IF :new.RELEASE_AMOUNT > :new.INNER_BUDGET then  #发布不能大于总金额
  30.        raise exce4;                               --引发异常
  31.     end if ;
  32.    
  33.     exception                                     --捕获并抛出异常
  34.       when exce1 then
  35.            raise_application_error(-20001,'对不起,在您操作过程中此指标已被使用,请重新操作!');
  36.       when exce2 then                           
  37.            raise_application_error(-20002,'对不起,出现实际总支出费用大于指标金额,请与厂商联系!');
  38.       when exce3 then                           
  39.            raise_application_error(-20003,'对不起,出现可用金额 + 占用金额 不等于指标总额,请与厂商联系!');
  40.       when exce4 then                           
  41.            raise_application_error(-20003,'对不起,出现发布金额大于预算总金额,请与厂商联系!');


  42. end CHECK_INNER_BUDGET;

复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则


小黑屋|手机版|Archiver|北京华夏安泰技术论坛  

GMT+8, 2019-1-23 06:37 , Processed in 0.078125 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表