【问题标题】:Fire one trigger when modifying two different tables修改两个不同的表时触发一个触发器
【发布时间】:2014-11-28 22:22:30
【问题描述】:

我们的 DBMS (Oracle) 存在问题,导致我们无法使用物化视图,因此我的老板提出了使用真实表和触发器来实现它的想法;在实例化视图所基于的表之一中执行插入、更新或删除操作时,从该表中插入、更新或删除。

我知道我会因为同意这一点而下地狱,但哀悼的时间已经姗姗来迟了。

我的问题是,我不知道如何在这些表中的任何一个发生更改时触发此触发器,而不仅仅是其中一个。像这样的东西似乎不起作用:

create trigger my_trigger
after insert or update or delete on table1, table2

另外,是否有一种方法可以只创建一个触发器而不是一个用于插入、一个用于更新和一个用于删除?

【问题讨论】:

  • 一个触发器总是针对一个表。两个表不能有一个触发器。

标签: oracle triggers


【解决方案1】:

试试这个,

CREATE or REPLACE TRIGGER test
  AFTER INSERT OR UPDATE OR DELETE ON tabletest
  REFERENCING OLD AS OLD NEW AS NEW 
  FOR EACH ROW 

DECLARE
      << Your declarations>>
BEGIN


IF INSERTING THEN 
<<Your insertions>>
END IF;

IF UPDATING THEN 
<<Your updations>>
END IF;    

IF DELETING THEN 
<<Your deletions>>
END IF;


EXCEPTION
    WHEN OTHERS THEN 
    <<exception handling>>;

END;

同样你不能在同一个触发器中有多个表,如果功能相同,你需要编写相同的代码并在每个触发器中更改表名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2019-04-24
    • 2016-03-25
    相关资源
    最近更新 更多