新列和旧列中的触发器
为什么我们不能在语句级触发器中使用 :new 和 :old 列?
Why can't we use :new and :old columns in a statement level trigger?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
为什么我们不能在语句级触发器中使用 :new 和 :old 列?
Why can't we use :new and :old columns in a statement level trigger?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
因为该语句可能会插入/删除/更新不止一行。因此没有新或旧列。
示例:
或:
或:
如果FOO 表有一个语句触发器,则在这三个句子中无法判断您是对无行、单行还是多行进行操作。
Because it might be the case that the statement is inserting/deleting/updating more than one row. So there is no new or old column.
Example:
Or:
Or:
If FOO table had a statement trigger, in these three sentences there is no way to tell if you are operating on none, single or multiple rows.
因为 DML 可能是基于集合的,会影响表中的多行。事实上,由于 SQL 是基于集合的,这应该是通常的情况。因此,语句级触发器无法确定您所指的 :OLD 值和 :NEW 值。
Because the DML could have been set-based, affecting multiple rows in the table. In fact, as SQL is properly set-based that should be the usual case. Consequently there is no way for the statement level triggers to determine which :OLD and which :NEW values you mean.
如前所述,语句级触发器可以用于一对多行更改,因此 :new 和 :old 不可用。
如果您需要跟踪 :new 和 :old 值并需要在语句触发器上访问它们,您可以创建一个行级触发器来存储新值和旧值以供语句级使用。这是我们之前解决这个问题的一种方法
包:
行级触发器:
语句级触发器:
As said before statement level triggers can be for one to many row changes so :new and :old aren't available.
If you need to track the :new and :old values and need access to them at the statement trigger you can create a row level trigger that stores the new and old values for use by the statement level. Here is one way we have solved this problem before
The package:
The row level trigger:
The statement level trigger: