3
我正在試圖找到一個場景,其中觸發器將在DBA_DEPDENDENCIES
表中爲REFERENCED_TYPE
,這意味着DB中有對象取決於TRIGGER
。會有這種情況嗎?Oracle可以觸發另一個數據庫對象的父對象嗎?
每當我創建一個觸發器調用一個函數或調用一個觸發DML的函數時,我會發現TRIGGER是一個子對象(TYPE)而不是父對象(REFERENCED_TYPE)。
我正在試圖找到一個場景,其中觸發器將在DBA_DEPDENDENCIES
表中爲REFERENCED_TYPE
,這意味着DB中有對象取決於TRIGGER
。會有這種情況嗎?Oracle可以觸發另一個數據庫對象的父對象嗎?
每當我創建一個觸發器調用一個函數或調用一個觸發DML的函數時,我會發現TRIGGER是一個子對象(TYPE)而不是父對象(REFERENCED_TYPE)。
觸發需要引用(隱式,你不能引用(調用)觸發明確地)出現在dba_dependencies
數據字典視圖的列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
非常感謝。這有幫助。 –