【问题标题】:Oracle can trigger be a parent object of another db object?Oracle 可以触发另一个 db 对象的父对象吗?
【发布时间】:2017-04-17 10:58:57
【问题描述】:

我试图找到一个场景,其中触发器是DBA_DEPDENDENCIES 表中的REFERENCED_TYPE,这意味着数据库中有依赖于TRIGGER 的对象。能有这样的情景吗?

每当我创建一个调用函数的触发器或调用 DML 的函数时,我都会看到 TRIGGER 是子对象 (TYPE) 而不是父对象 (REFERENCED_TYPE)。

【问题讨论】:

    标签: oracle triggers parent-child


    【解决方案1】:

    触发器需要被引用(隐式地,您不能显式地引用(调用)触发器)才能出现在dba_dependenciesdata 字典视图的referenced_type 列中。

    Can there be such a scenario ?

    这是我现在能想到的一个(您需要使用 Oracle 11g 或更高版本)。您创建几个相同类型(相同时间点)的触发器并指定触发顺序:follows <<trigger_name>>precedes <<trigger_name>>

    --drop table foo purge;
    
    create table foo(c1 number);
    
    create or replace trigger tr_foobi_1
    before insert on foo
    for each row
    begin
      null;
    end;
    /
    
    create or replace trigger tr_foobi_2
    before insert on foo
    for each row
    follows tr_foobi_1
    begin
      null;
    end;
    /
    
    column name format a10;
    column type format a10;
    column referenced_name format a17;
    column referenced_type format a17;
    
    select name
         , type
         , referenced_name
         , referenced_type
      from dba_dependencies
     where referenced_type = 'TRIGGER';
    
    Result:
    
    NAME       TYPE       REFERENCED_NAME   REFERENCED_TYPE  
    ---------- ---------- ----------------- -----------------
    TR_FOOBI_2 TRIGGER    TR_FOOBI_1        TRIGGER          
    

    【讨论】:

    • 非常感谢。这有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多