我想创建一个在更新、删除或插入记录时执行的触发器。我努力了:
create or replace trigger "ADDRESS_ID_BEFORE_INSERT"
BEFORE
insert or update or delete on "ADDRESS_ID"
for each row
DECLARE
v_usuario nvarchar2(100);
accion nvarchar2(100);
v_fecha date;
begin
SELECT sysdate INTO v_fecha from dual;
SELECT user INTO v_usuario FROM dual;
IF UPDATING THEN
INSERT INTO auditoria (ACCION_REALIZADA,FECHA_ACCION,NOMBRE_USUARIO)values('Actualizar',v_fecha,v_usuario);
ELSEIF DELETING THEN
INSERT INTO auditoria (ACCION_REALIZADA,FECHA_ACCION,NOMBRE_USUARIO)values('Elimnar',v_fecha,v_usuario);
ELSE
INSERT INTO auditoria (ACCION_REALIZADA,FECHA_ACCION,NOMBRE_USUARIO)values('Insertar',v_fecha,v_usuario);
END IF;
end;
我应该做的是在另一个表中插入用户正在执行的操作,但我收到以下错误:
编译失败,第 11 行 (23:45:39) 与编译错误相关的行号与第一个 BEGIN 语句相关。这只会影响数据库触发器的编译。PLS-00103:在预期以下情况之一时遇到符号“DELETING”::=。( @ % ; 编译失败,第 16 行 (23:45:39) 与编译错误相关的行号与第一个 BEGIN 语句相关。这只影响数据库触发器的编译。PLS-00103:遇到符号“;”预期以下情况之一时:如果
1-在 PL/SQL 语言中,嵌套的IF语句使用ELSIF。
2-要进行审计,必须使用AFTER事件,即每列中已经有一个确定的值。
关于IF THEN ELSIF 语句的 Oracle 文档