【发布时间】:2017-04-17 10:58:57
【问题描述】:
我试图找到一个场景,其中触发器是DBA_DEPDENDENCIES 表中的REFERENCED_TYPE,这意味着数据库中有依赖于TRIGGER 的对象。能有这样的情景吗?
每当我创建一个调用函数的触发器或调用 DML 的函数时,我都会看到 TRIGGER 是子对象 (TYPE) 而不是父对象 (REFERENCED_TYPE)。
【问题讨论】:
标签: oracle triggers parent-child
我试图找到一个场景,其中触发器是DBA_DEPDENDENCIES 表中的REFERENCED_TYPE,这意味着数据库中有依赖于TRIGGER 的对象。能有这样的情景吗?
每当我创建一个调用函数的触发器或调用 DML 的函数时,我都会看到 TRIGGER 是子对象 (TYPE) 而不是父对象 (REFERENCED_TYPE)。
【问题讨论】:
标签: oracle triggers parent-child
触发器需要被引用(隐式地,您不能显式地引用(调用)触发器)才能出现在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
【讨论】: