Sql 执行触发器等待修改同一表的事件时出错
我创建了一个触发器:当删除一个表值时,它会在事件发生时对同一个表执行更新。这意味着我需要一个临时表来执行这个触发器 SQL Developer(Oracle)中出现错误:Sql 执行触发器等待修改同一表的事件时出错,sql,oracle,triggers,Sql,Oracle,Triggers,我创建了一个触发器:当删除一个表值时,它会在事件发生时对同一个表执行更新。这意味着我需要一个临时表来执行这个触发器 SQL Developer(Oracle)中出现错误: 原因:一个触发器(或在这个语句中引用的用户定义的PLSQL函数)试图查看(或修改)一个表阙正处于由它发出的语句修改的中间。 操作:重写触发器(或函数),使其不读取表 --带复合触发器-相同错误 create or replace trigger "name_trigger" for delete on table1 COMP
原因:一个触发器(或在这个语句中引用的用户定义的PLSQL函数)试图查看(或修改)一个表阙正处于由它发出的语句修改的中间。
操作:重写触发器(或函数),使其不读取表 --带复合触发器-相同错误create or replace
trigger "name_trigger"
for delete on table1
COMPOUND TRIGGER
AFTER STATEMENT IS
BEGIN
MERGE INTO table1
USING ( SELECT rowid rid, row_number() OVER (PARTITION BY column_pearson order by column_age rn FROM table1) u
ON ( t.rowid = u.rid )
WHEN MATCHED THEN UPDATE SET t.column2 = u.rn;
END AFTER STATEMENT
END name_trigger
由于您没有引用
:old
或:new
值,因此只需删除每行的,就不会出现错误。谢谢!,现在在您的响应显示消息之前:-必须声明标识符“t.column-pearson”-编译单元分析已终止我正在尝试“…按t.column\u pearson分区…”但除非我读错了,否则不要工作。每当执行DELETE时,此触发器中的MERGE语句都会更新表1中的每一行。您确定要这样做吗?关于column\u pearson
-这是否可能在数据库中声明为“column\u person”?只是猜测一下……调用触发器的delete事件和调用触发器后要执行的更新在同一个表上,不想使用另一个表,即使termporária用于此。无需临时表即可完成此操作?因为您没有引用:old
或:new
值,所以只需删除每行的,就不会出现错误。谢谢!,现在在您的响应显示消息之前:-必须声明标识符“t.column-pearson”-编译单元分析已终止我正在尝试“…按t.column\u pearson分区…”但除非我读错了,否则不要工作。每当执行DELETE时,此触发器中的MERGE语句都会更新表1中的每一行。您确定要这样做吗?关于column\u pearson
-这是否可能在数据库中声明为“column\u person”?只是猜测一下……调用触发器的delete事件和调用触发器后要执行的更新在同一个表上,不想使用另一个表,即使termporária用于此。不需要临时桌子就可以完成吗?
create or replace
trigger "name_trigger"
for delete on table1
COMPOUND TRIGGER
AFTER STATEMENT IS
BEGIN
MERGE INTO table1
USING ( SELECT rowid rid, row_number() OVER (PARTITION BY column_pearson order by column_age rn FROM table1) u
ON ( t.rowid = u.rid )
WHEN MATCHED THEN UPDATE SET t.column2 = u.rn;
END AFTER STATEMENT
END name_trigger