代码:
create or replace trigger "ARTICULOSCAT_INSERT" AFTER insert on
"ARTICULOSCAT" for each row BEGIN INSERT INTO
BITACORA (USUARIO,FECHA,TABLA_AFECTADA,ACCION_EFECTUADA,COLUMNAS,VALORES_ANT,VALORES_NUEVOS)
VALUES(USER,SYSDATE,'ArticulosCat','Insert','I_ID_ARTICULO,V_DESCRIPCION_100,I_ID_UM,F_PRECIO,I_ID_IMPUESO',
CONCAT('I_ID_ARTICULO: ',:OLD.I_ID_ARTICULO,',','V_DESCRIPCION_100: ',:OLD.V_DESCRIPCION_100,',','I_ID_UM: ',:OLD.I_ID_UM,',','F_PRECIO: ',:OLD.F_PRECIO,',','I_ID_IMPUESTO: ',:OLD.I_ID_IMPUESTO),
CONCAT('I_ID_ARTICULO: ',:NEW.I_ID_ARTICULO,',','V_DESCRIPCION_100: ',:NEW.V_DESCRIPCION_100,',','I_ID_UM: ',:NEW.I_ID_UM,',','F_PRECIO: ',:NEW.F_PRECIO,',','I_ID_IMPUESTO: ',:NEW.I_ID_IMPUESTO)
END;
错误:
编译失败,第3行(02:17:30)与 编译错误与第一个BEGIN语句有关。这个 仅影响数据库触发器的编译。 PL / SQL:ORA-00909: 参数数目无效编译失败,第2行(02:17:30) 与编译错误相关的行号是相对于 第一个BEGIN语句。这只会影响数据库的编译 触发器。 PL / SQL:忽略SQL语句编译失败,第4行 (02:17:30)与编译错误相关的行号是 相对于第一个BEGIN语句。这只会影响 数据库触发器的编译。 PLS-00103:遇到符号 预期以下情况之一时为“文件结束” :(开始情况 如果循环mod为null,则声明goto的结束异常退出 返回选择更新,同时使用
答案 0 :(得分:1)
问题出在您使用CONCAT
函数上。如您所见,from the documentation仅接受两个参数。
您应该使用串联运算符||
,因为它可以用来将许多不同的部分串在一起,并且,IMO,比一系列嵌套的CONCAT更容易阅读!
因此,触发器将类似于:
CREATE OR REPLACE TRIGGER articuloscat_insert
AFTER INSERT ON articuloscat
FOR EACH ROW
BEGIN
INSERT INTO bitacora
(usuario,
fecha,
tabla_afectada,
accion_efectuada,
columnas,
valores_ant,
valores_nuevos)
VALUES
(USER,
SYSDATE,
'ArticulosCat',
'Insert',
'I_ID_ARTICULO,V_DESCRIPCION_100,I_ID_UM,F_PRECIO,I_ID_IMPUESO',
'I_ID_ARTICULO: ' || :old.i_id_articulo || ',' || 'V_DESCRIPCION_100: ' || :old.v_descripcion_100 || ',' || 'I_ID_UM: ' || :old.i_id_um || ',' || 'F_PRECIO: ' || :old.f_precio || ',' || 'I_ID_IMPUESTO: ' || :old.i_id_impuesto,
'I_ID_ARTICULO: ' || :new.i_id_articulo || ',' || 'V_DESCRIPCION_100: ' || :new.v_descripcion_100 || ',' || 'I_ID_UM: ' || :new.i_id_um || ',' || 'F_PRECIO: ' || :new.f_precio || ',' || 'I_ID_IMPUESTO: ' || :new.i_id_impuesto);
END articuloscat_insert;
/
在插入的末尾,您还缺少分号(;),我已为您添加了分号。