【问题标题】:Oracle error: ORA-04079: invalid trigger specificationOracle 错误:ORA-04079:无效的触发器规范
【发布时间】:2015-05-02 21:28:11
【问题描述】:

我是 Oracle 的新手,想知道如何使这个触发器工作。我可以单独执行每个触发器,但如果有意义的话,我需要将它们全部放在同一个触发器中。

    create trigger ID_trigger
    before insert on crime, evidence, offence, officer
    for each row
    begin
    select crime_seq.nextval into :new.crime_id from dual
    and officer_seq.nextval into :new.officer_id from dual
    and evidence_seq.nextval into :new.evidence_id from dual
    and offence_seq.nextval into :new.offence_id from dual;
    end;

我最初为每个表设置了一个触发器。但是,当将数据提交到我的表单时,触发器似乎已经覆盖了前一个

【问题讨论】:

  • 您正在尝试创建一个涵盖四个表的单个触发器,而不是每个表上的单个触发器?请以the documentation 开头以查看该语句的正确语法。您的 select 语句也非常错误。
  • 我明白,不可能创建一个涵盖所有四个表的触发器吗? @AlexPoole
  • @AlexPoole 我最初对每个表都有一个单独的触发器,但是当将数据汇总到我的表单中时,触发器似乎已经覆盖了之前的触发器

标签: oracle triggers


【解决方案1】:

" 我最初对每个表都有一个单独的触发器,但是当 将数据提交到我的表单中,触发器似乎已被覆盖 上一个”

让我们猜一下:你调用了所有四个触发器id_trigger。每个后续的 CREATE OR REPLACE TRIGGER 调用都会覆盖第一个。除非您像此处那样使用 CREATE TRIGGER,否则在这种情况下,每个后续调用都会失败,无论哪种方式,只有一个表会有触发器。

你看,即使它们属于一个表,触发器也是独立的数据库对象。因此,与索引或约束一样,它们的名称在架构中必须是唯一的。

解决方案很简单:给每个触发器一个不同的名称,比如包括表名。

【讨论】:

  • 不,我为每个触发器命名不同,与其表名一致,它仍然覆盖了以前的@APC
  • @Oliver - 抱歉,我认为您弄错了。请发布我们可以运行的最小代码集,以展示这种行为。
猜你喜欢
  • 1970-01-01
  • 2016-08-02
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多