提问人:Anthony Nuñez 提问时间:11/20/2022 最后编辑:LittlefootAnthony Nuñez 更新时间:11/20/2022 访问量:13
在审计中触发两个表
Trigger of two tables in an audit
问:
早上好,我正在尝试审核两个表,并且我已经调查过它无法完成,因此我解释了我想做什么:
- 我有两个表(Participante、Actividad),它们由第三个表(Part_Actividad)连接
- 我想审核 Participants(参与者)表,但同样,我需要活动的 Id 来了解参与者的数据在哪个活动中发生了更改。
我的想法
- 创建如下所示的触发器
创建或替换触发器Tri_Auditoria 在 Participante 上插入后 对于每一行 宣 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;
/ 结果: 当我将数据插入参与者表时,它不会插入,并且会发送触发错误。
答:
0赞
Littlefoot
11/20/2022
#1
突变表错误,不是吗?这是因为您正在从导致触发器触发的同一表中进行选择,这是不允许的。
无论如何,你不应该这样做,因为你有这个值在处置中 - 只需使用伪记录引用它,例如: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;
/
上一个:SQL 创建 2 个带约束的表
下一个:尝试声明游标时出现此错误
评论