审计中两个表的触发器



早上好,我正在尝试审计两个表,并且我已经调查了它不能做,因此我解释了我想做的事情:

  1. 我有两个表(Participante, Actividad),它们由第三个表(Part_Actividad)连接
  2. 我想审计参与者表,但是以同样的方式,我需要活动的Id来知道在哪个活动中参与者的数据被更改了。

Ideas I had

  1. 创建如下触发器

创建或替换触发器Tri_Auditoria在插入参与者之后对于每一行声明v_Participante_ID Participante.Participante_ID %类型;v_Actividad_ID Part_Actividad.Actividad_ID %类型;

BEGIN
SELECT participante_ID INTO v_Participante_ID
FROM Participante;
SELECT Actividad_ID INTO v_Actividad_ID
FROM Part_Actividad
WHERE PartAct_ID = v_Participante_ID;
INSERT INTO Auditoria(Auditoria_ID, Actividad_ID, Participante_ID, TipPart_ID_Ant, Part_P_Nombre_Ant, Part_P_Apell_Ant, Part_Cedula_Ant, Part_Genero_ant, Part_FNaci_Ant, Aud_Operacion, Usuario_Modificador, Fecha_Modificacion)
VALUES (sec_Auditoria.nextval, v_Actividad_ID, :new.Participante_ID,:new.TipPart_ID,:new.Part_P_Nom,:new.Part_P_Apell,:new.Part_Cedula,:new.Part_Genero,:new.Part_FNaci,'I',USER,sysdate);
END Tri_Auditoria;

/结果:当我向参与者表中插入数据时,它没有被插入,并发送一个触发错误。

变异表错误,不是吗?这是因为你选择的是导致trigger触发的同一个表,而这是不允许的。

无论如何,您不应该这样做,因为您在处置中有该值-只需使用:new伪记录引用它,例如
CREATE OR REPLACE TRIGGER Tri_Auditoria 
AFTER INSERT ON Participante 
FOR EACH ROW 
DECLARE 
v_Actividad_ID Part_Actividad.Actividad_ID%TYPE;
BEGIN
SELECT Actividad_ID 
INTO v_Actividad_ID
FROM Part_Actividad
WHERE PartAct_ID = :new.participante_ID;        --> this
INSERT INTO Auditoria
(Auditoria_ID, Actividad_ID, Participante_ID, 
TipPart_ID_Ant, Part_P_Nombre_Ant, Part_P_Apell_Ant, 
Part_Cedula_Ant, Part_Genero_ant, Part_FNaci_Ant, 
Aud_Operacion, Usuario_Modificador, Fecha_Modificacion)
VALUES (sec_Auditoria.nextval, v_Actividad_ID, :new.Participante_ID,
:new.TipPart_ID,:new.Part_P_Nom,:new.Part_P_Apell,
:new.Part_Cedula,:new.Part_Genero,:new.Part_FNaci,
'I',USER,sysdate);
END Tri_Auditoria;
/

最新更新