假设用户USER1已在各种表上创建了触发器,所有这些表都不归该用户所有,但这些触发器将数据记录到USER1表。
现在,如果我使用以下命令将用户放入Oracle,那么这会丢弃所有这些其他触发器吗?
SQL> drop user USER cascade;
如果没有,触发器将无法工作,因为它们找不到要写入的目标表。另外,有没有办法丢弃数据库用户引发的所有触发器,而不管它们属于哪种模式?
答案 0 :(得分:1)
一个简单的测试表明触发器将被删除。我创建了一个新用户TEST2
,授予了CREATE ANY TRIGGER
,然后在PHIL.BIGTABLE
上创建了一个触发器。
PHIL@PHILL11G2 > select count(*) from dba_triggers;
COUNT(*)
----------
617
PHIL@PHILL11G2 > drop user test2 cascade;
User dropped.
PHIL@PHILL11G2 > select count(*) from dba_triggers;
COUNT(*)
----------
616
PHIL@PHILL11G2 >
答案 1 :(得分:0)
触发器元数据位于DBA_TRIGGERS中,因此删除它们是一个问题:
begin
for x in (
select owner,
trigger_name
from dba_triggers
where ... -- apply predicate to select triggers here)
loop
execute immediate 'drop trigger '||x.owner||'.'||x.trigger_name;
end loop;
end;
/