Oracle中的语句触发器?

时间:2013-02-09 22:53:05

标签: sql oracle triggers

我正在攻读DBMS考试,我试图做一些触发器。 “标准”行触发器没有问题,但问题出现了语句触发器。

练习是创建一个触发器,如果​​某个列的值的总和更新到最小值(30)以下,则会引发异常。

所以表格如下:

ID | VALUE
----------
 1 |  23
 2 |  11
 3 |  14

并且更新将执行类似

的操作
UPDATE TABLE SET VALUE = VALUE - 10

这应该抛出异常,因为之前的总和是48,而更新之后的总和是18。

我尝试过使用行触发器但是在同一个表上执行select会产生一个“变异表”警告,所以我发现这应该是由于触发器设计不佳所致。

可能我应该实现一个语句触发器,但似乎我无法访问new_table或old_table,我不知道如何编写它们。这很蹩脚,因为它们似乎很简单,但我找不到任何有用的或任何例子。

任何帮助?

提前致谢!

编辑:

以及new_table / old_table引用似乎存在于Oracle ..

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

CREATE OR REPLACE TRIGGER trg_xyz
AFTER UPDATE ON tableX
DECLARE
  v_sum number;
BEGIN

  SELECT SUM(VALUE) into v_sum
  FROM tableX;

  IF v_sum < 30 THEN
    raise_application_error(-20001,"ERROR MESSAGE");
  END IF;
END;
/

答案 1 :(得分:0)

我不知道Oracle语法,但我相信new_table与SQL Server中的INSERTED相同;如果是这样的话:

CREATE TRIGGER TableName_U
BEFORE UPDATE
IF (SELECT SUM(VALUE) FROM new_table) < 30 THEN
    BEGIN
        raise error syntax
        abort update syntax
    END