我正在准备 DBMS 考试,我正在尝试做一些触发器。 “标准”行触发器没有问题,但语句触发器出现了问题。
练习是创建一个触发器,如果特定列的值的总和更新到低于最小值 (30),该触发器将引发异常。
所以表格是这样的:
ID | VALUE
----------
1 | 23
2 | 11
3 | 14
更新将执行类似的操作
UPDATE TABLE SET VALUE = VALUE - 10
这应该会抛出异常,因为之前的总和是 48,而更新后的总和将是 18。
我尝试过使用行触发器,但在同一个表上进行选择会引发“变异表”警告,因此在寻找此问题时我发现这应该是由于触发器设计不佳所致。
也许我应该实现一个语句触发器,但似乎我无法访问 new_table 或 old_table,而且我不知道如何编写它们。这很蹩脚,因为它们看起来很简单,但我找不到任何有用的东西或任何示例。
有什么帮助吗?
提前致谢!
编辑:
并且 new_table/old_table 引用似乎存在于 Oracle 中..
最佳答案
尝试这样的事情:
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;
/
关于sql - Oracle中的语句触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792549/