2

假设用户 USER1 在多个表上创建了触发器,所有这些表都不属于该用户,但这些触发器将数据记录到 USER1 表中。

现在,如果我使用以下命令在 Oracle 中删除用户,这是否也会删除所有其他触发器?

SQL>drop 用户 USER 级联;

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

4

2 回答 2

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 >
于 2012-05-03T10:57:59.473 回答
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;
/
于 2012-05-03T11:03:35.170 回答