Oracle 在插入匹配语句之前或之后删除值的触发器

Oracle 在插入匹配语句之前或之后删除值的触发器,oracle,plsql,sql-delete,database-trigger,Oracle,Plsql,Sql Delete,Database Trigger,因此,我正在做一个大学项目,在我的数据库中,我需要在插入一个与同一部门匹配的上司之前或之后删除一个上司,这无关紧要,但我不断得到变异表错误 CREATE OR REPLACE TRIGGER PRUEBA3 FOR INSERT OR UPDATE OR DELETE ON MODERADORES COMPOUND TRIGGER AFTER EACH ROW IS BEGIN IF departamento==:NEW.departamento THEN DELET

因此,我正在做一个大学项目,在我的数据库中,我需要在插入一个与同一部门匹配的上司之前或之后删除一个上司,这无关紧要,但我不断得到变异表错误

CREATE OR REPLACE TRIGGER PRUEBA3
FOR INSERT OR UPDATE OR DELETE ON MODERADORES
COMPOUND TRIGGER

AFTER EACH ROW IS
BEGIN
    IF departamento==:NEW.departamento THEN

        DELETE FROM MODERADORES WHERE OID_MOD = old_moderador;

    END IF;
END AFTER EACH ROW;

END PRUEBA3;
/

由于要在插入时删除凸台,因此请删除删除触发器。这将移除突变触发器

FOR INSERT OR UPDATE ON MODERADORES

但对于插入,您将如何匹配旧值。最好的解决方案是在您尝试执行相同操作时使用Merge语句

如果适合您的应用程序,我建议您使用
Merge
而不是
insert
。为什么要使用触发器?您可能想要的是在表中为部门设置一个唯一的行。唯一约束通常用于此目的,最好是主键。在跳转到使用触发器之前,先了解这些事情是如何工作的。复合触发器的要点是在每行的before(或AFTER)部分中存储修改记录的详细信息(通常以数组形式),然后使用该数组在AFTER语句部分中执行某些操作。在您的例子中,您将在数组中隐藏部门ID和新上司的ID,然后在最后查找并删除旧上司。