有时候,会想知道某个表是不是会有一些trigger去更新它。 但是一般更新语句是写在trigger 内部,所以我不确定 dba_dependencies这个视图能不能存储这种依赖关系。 做个试验:
创建两个表,t1 和 t2
SQL> create table t1(val number); Table created. SQL> create table t2(val number); Table created.
创建一个trigger test。 该trigger构建在t1上,每次t1插入一条记录。在t2中插入数字8。
SQL> create trigger test 2 before insert on scott.t1 3 begin 4 insert into scott.t2 values(8); 5 end; 6 / Trigger created.
ok。 test是基于t1触发的,所以在dba_dependencies中查到他们的依赖关系是很明显的。那么对于t2能查到吗? 我们试一下:
SQL> select owner,name,type,REFERENCED_OWNER,REFERENCED_NAME,REFERENCED_NAME from dba_dependencies where name='TEST'; OWNER NAME TYPE REFERENCED_OWNER REFERENCED_NAME REFERENCED_NAME -------- -------- -------- ------------------ ------------------ ------------------ SYS TEST TRIGGER SCOTT T1 T1 SYS TEST TRIGGER SCOTT T2 T2
可以看到,都能查到。所以我们通过dba_dependencies是可以查到trigger和table的依赖关系的。即使这种依赖关系是在内部代码中。