+ -
当前位置:首页 → 问答吧 → 触发器中如何进行聚合运算?

触发器中如何进行聚合运算?

时间:2011-11-04

来源:互联网

现创建一个触发器,实现更新emp的sal值,限制sal总和<10000。

CREATE TRIGGER tr_sal

AFTER UPDATE OF sal ON emp

FOR EACH ROW 

DECLARE sumsal NUMBER;

BEGIN

SELECT SUM(sal) INTO sumsal FROM emp;

IF sumsal<10000 THEN RAISE_APPLICATION_ERROR(-20001,'sal总和<10000');

END IF;

END;

但是不允许在基表emp中进行查询操作。我的思路是在tr_sal中调用存储过程实现约束功能。

各位大虾,有没有更好的方法实现<10000 的功能?

谢过大家~

作者: owen00sun   发布时间: 2011-11-04

加上自定义事务就可以了
CREATE OR REPLACE TRIGGER tr_sal
  BEFORE INSERT OR UPDATE OF sal
  ON emp
  FOR EACH ROW
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
  sumsal NUMBER;
BEGIN
  SELECT SUM (sal)
  INTO sumsal
  FROM emp
  WHERE ROWID <> :new.ROWID;

  sumsal := sumsal + :new.sal;

  IF sumsal > 10000
  THEN
  RAISE_APPLICATION_ERROR (-20001, 'sal总和' || sumsal || '>10000);
  END IF;
END;

作者: tx2730   发布时间: 2011-11-04