获取触发 Oracle 触发器的值

Posted

技术标签:

【中文标题】获取触发 Oracle 触发器的值【英文标题】:Getting the value that fired the Oracle trigger 【发布时间】:2012-02-08 05:58:30 【问题描述】:

我对 Oracle 触发器非常陌生。假设我在表 emp 中插入了一个触发器。有没有办法找出触发触发器的插入记录是什么。如果插入的记录是特定值,我希望触发器具有执行某些操作的代码。

【问题讨论】:

【参考方案1】:

正在插入的行在触发器中以NEW 的形式提供

查看手册了解更多详情。

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#BABEBAAB

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/triggers.htm#LNPLS99955

【讨论】:

【参考方案2】:

假设您有一个行级触发器,您可以简单地使用:NEW 伪记录

CREATE TRIGGER name_of_trigger
  BEFORE INSERT ON emp
  FOR EACH ROW
DECLARE
  <<declare variables>>
BEGIN
  IF( :new.ename = 'JUSTIN' )
  THEN
    <<do something if the newly inserted ENAME value is 'JUSTIN'>>
  END IF;
END;

对于 DDL 触发器,方法完全不同。在这种情况下,伪函数 ora_dict_obj_owner 和 ora_dict_obj_name 将返回 DDL 语句正在操作的表的所有者和名称。

【讨论】:

嘿@Justin Cave 很抱歉打扰你,但我意识到我实际上需要一个 DDL 或 SYStem 触发器而不是 DML 触发器。每次在架构CREATE OR REPLACE TRIGGER drop_trigger AFTER CREATE ON hr.SCHEMA BEGIN END; 中创建新表时,我都会调用触发器我如何获得现在触发触发器的创建表的名称?它还是新的吗? @Eosphorus - 不,DDL 触发器是非常不同的动物。更新了我的答案。 非常感谢贾斯汀。这已经是你帮助我的好几次了。我真的很感激:)

以上是关于获取触发 Oracle 触发器的值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle利用触发器更新插入时某一列的值

在更新触发器之前或之后更改同一表中的值(oracle)

Oracle表的更新触发器问题,更新本表的字段。

Oracle触发器函数和存储过程

Oracle - 在插入前触发检查约束

触发器:删除表a中的某行,则修表b中某字段的值。