【问题标题】:How to use oracle triggers without for each row如何在没有每一行的情况下使用 oracle 触发器
【发布时间】:2013-10-19 05:12:40
【问题描述】:
CREATE TRIGGER update
AFTER UPDATE OF pos ON table
IF (COUNT (SELECT * FROM table WHERE pos= 'xyz') = 0)
BEGIN
DELETE FROM table WHERE pos = 'abc';
END;

现在我想检查更新后的表,看看它是否在属性 X 中包含值“xyz”,如果没有,则删除该列的所有具有“abc”的元组。我不确定如何在 ORACLE 中解决这个问题。任何帮助,将不胜感激。谢谢!

【问题讨论】:

    标签: sql oracle triggers oracle-sqldeveloper eventtrigger


    【解决方案1】:

    这确实将触发器的使用范围延伸到了它们的自然有用范围之外。您正在将应用程序代码移动到对应用程序开发人员隐藏的地方,并且很可能会在代码中引入死锁。我强烈建议您使用触发器来记录数据更改,并可能用于执行行更改约束,但仅此而已。

    如果您的应用程序是基于 PL/SQL 的,那么我会使用 API 子程序来执行更新,并在其中包含代码。您可能需要包含 DBMS_Lock 代码来序列化删除。

    否则,请考虑将此逻辑包装在应用层的事务中并从那里运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      相关资源
      最近更新 更多