删除前触发

问题描述 投票:-1回答:1

我创建了一个删除前触发器:

create or replace trigger myTrigger3 
before delete on emp
for each row
begin
    update emp set mgr = 'Null' where mgr = :old.emp_name;
end;

表在哪里

emp(emp_id integer primary key, emp_name varchar(20), mgr varchar(20))

但是当我运行此语句时,触发器未运行。

delete from emp where emp_id = 1004;
select * from emp;

错误报告-ORA-04091:表DB20178004.EMP正在变异,触发器/功能可能看不到ORA-06512:位于“ DB20178004.MYTRIGGER3”的第2行ORA-04088:执行触发器'DB20178004.MYTRIGGER3'时发生错误]

sql oracle plsql database-trigger
1个回答
0
投票

您可能更喜欢使用set null选项添加外键约束,而不是这样的触发器。当然,您需要一个主键应该已经在emp_id列中定义了:

alter table emp 
add constraint pk_empno primary key (emp_id);

alter table emp 
add constraint fk_mgr foreign key(mgr)
references emp(emp_id)
on delete set null;

[每当删除具有emp_id列的匹配值的mgr记录时,在删除带有emp_id的记录后将清空这些记录。

© www.soinside.com 2019 - 2024. All rights reserved.