【问题标题】:How can I fix these Trigger Errors? Oracle 11g Express如何修复这些触发错误? Oracle 11g 速成版
【发布时间】:2019-04-05 10:54:08
【问题描述】:

代码:

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:遇到符号 预期以下情况之一时的“文件结尾”:(开始大小写 为 goto 声明结束异常退出 if loop mod null pragma raise 使用时返回选择更新

【问题讨论】:

  • 这是一个拼写错误 - 您缺少值语句的右括号。可以看到最后的concat结尾括号,后面不跟另一个关闭values(

标签: sql oracle triggers


【解决方案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;
/

您还缺少插入末尾的分号 (;),这是我为您添加的。

【讨论】:

  • 非常感谢。
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2015-04-23
  • 1970-01-01
  • 2017-07-19
  • 2018-11-25
  • 1970-01-01
相关资源
最近更新 更多