sql - Oracle中的语句触发器?

标签 sql oracle triggers

我正在准备 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/

相关文章:

Oracle V$OSSTAT

java - 数据拼接连接/合并 - Oracle 与基于 Java 的技术

如果插入的值与唯一约束冲突,则 SQL 触发器在插入时更新字段

MySQL 连接和修剪数据?

c# - ExecuteScalar 如果 DBNull 问题

sql - 锁定 SQL 表并等待释放锁 - Java

mysql - 如何获取最大平均值及其按月分组的 Id

c# - 无法使用 C# 库更新 Oracle DB 中的行

sql - 如何将名称作为变量存储在同一脚本中的表中插入?

wpf - 如果它为空,如何在触发器中设置属性?