Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何对每行使用oracle触发器而不使用_Sql_Oracle_Triggers_Oracle Sqldeveloper_Eventtrigger - Fatal编程技术网

Sql 如何对每行使用oracle触发器而不使用

Sql 如何对每行使用oracle触发器而不使用,sql,oracle,triggers,oracle-sqldeveloper,eventtrigger,Sql,Oracle,Triggers,Oracle Sqldeveloper,Eventtrigger,现在,我想检查更新后的表,看看它是否在attributeX中包含值'xyz',如果不包含,则删除该列中包含'abc'的所有元组。我不确定在甲骨文中到底该怎么做。任何帮助都将不胜感激。谢谢 这实际上是在扩大触发器的使用范围,使其超出其自然的有用范围。您正在将应用程序代码移动到一个对应用程序开发人员隐藏的位置,并且很可能会在代码中引入死锁。我强烈建议您使用触发器记录数据更改,也许还可以强制执行行更改约束,但除此之外几乎没有 如果您的应用程序是基于PL/SQL的,那么我将使用API子程序来执行更新,并

现在,我想检查更新后的表,看看它是否在attributeX中包含值'xyz',如果不包含,则删除该列中包含'abc'的所有元组。我不确定在甲骨文中到底该怎么做。任何帮助都将不胜感激。谢谢

这实际上是在扩大触发器的使用范围,使其超出其自然的有用范围。您正在将应用程序代码移动到一个对应用程序开发人员隐藏的位置,并且很可能会在代码中引入死锁。我强烈建议您使用触发器记录数据更改,也许还可以强制执行行更改约束,但除此之外几乎没有

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

另一方面,考虑在应用层中的事务中包装这个逻辑并从那里运行它。

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;