【问题标题】:Statement-level trigger in OracleOracle中的语句级触发器
【发布时间】:2017-11-14 18:31:39
【问题描述】:

我无法完全理解语句级触发器的工作原理。它为每笔交易执行一次,对吗?如果我有这个 AFTER INSERT 触发器并且它在内部做的是如果它满足条件(例如列状态,UPDATE table_name SET STATUS = "Single" WHERE COLUMN is null),它会更新一个特定的列。

是否只有新插入的数据会受到影响?或者表中的每个数据在列状态中都有这个空值。我很高兴听到您对此的了解。

【问题讨论】:

  • "每个事务执行一次" - 。它为每个语句执行一次——顾名思义。

标签: oracle


【解决方案1】:

语句级触发器将在触发语句运行后触发一次,这与为每个受影响的行触发的行级触发器不同。

After 语句触发器通常用于处理数据集 - 例如登录到表中,或运行一些语句后处理(通常是过程)。

如果您想更新每个受影响行中的值,那么我建议您使用前行级别触发器。您问题中的更新语句将影响 COLUMN 列为空的所有行。

触发器是否真的是正确的使用是有争议的。不过,我建议您查看the documentationthis Oracle-base article,以更好地了解触发器的工作原理以及何时可以使用它们。

【讨论】:

  • 是的,你是对的。我已经测试并看到它会影响此特定列的所有数据。至于你的建议,发生了一个错误,说表正在变异,触发器/函数可能看不到它。
  • 这完全取决于您要执行的操作 - 听起来您可能需要插入具有该列中设置的值的数据(每行插入之前),但这可能行不通为你。我建议您发布一个包含输入和预期输出数据的新问题,并描述您正在尝试做什么。这样,我们可以更好地帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 2011-06-24
  • 1970-01-01
相关资源
最近更新 更多