1
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;

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

4

1 回答 1

3

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

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

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

于 2013-10-11T08:48:38.853 回答