Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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 执行触发器等待修改同一表的事件时出错_Sql_Oracle_Triggers - Fatal编程技术网

Sql 执行触发器等待修改同一表的事件时出错

Sql 执行触发器等待修改同一表的事件时出错,sql,oracle,triggers,Sql,Oracle,Triggers,我创建了一个触发器:当删除一个表值时,它会在事件发生时对同一个表执行更新。这意味着我需要一个临时表来执行这个触发器 SQL Developer(Oracle)中出现错误: 原因:一个触发器(或在这个语句中引用的用户定义的PLSQL函数)试图查看(或修改)一个表阙正处于由它发出的语句修改的中间。 操作:重写触发器(或函数),使其不读取表 --带复合触发器-相同错误 create or replace trigger "name_trigger" for delete on table1 COMP

我创建了一个触发器:当删除一个表值时,它会在事件发生时对同一个表执行更新。这意味着我需要一个临时表来执行这个触发器

SQL Developer(Oracle)中出现错误:

原因:一个触发器(或在这个语句中引用的用户定义的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