删除数据库用户drop是否触发了用户从其他模式引发的表?

时间:2012-05-03 10:42:52

标签: database oracle

假设用户USER1已在各种表上创建了触发器,所有这些表都不归该用户所有,但这些触发器将数据记录到USER1表。

现在,如果我使用以下命令将用户放入Oracle,那么这会丢弃所有这些其他触发器吗?

SQL> drop user USER cascade;

如果没有,触发器将无法工作,因为它们找不到要写入的目标表。另外,有没有办法丢弃数据库用户引发的所有触发器,而不管它们属于哪种模式?

2 个答案:

答案 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;
/