我创建了一个删除前触发器:
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'时发生错误]
您可能更喜欢使用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
的记录后将清空这些记录。