2

ユーザー USER1 がさまざまなテーブルでトリガーを作成したと仮定します。それらはすべてこのユーザーによって所有されていませんが、これらのトリガーはデータを USER1 テーブルに記録します。

ここで、次のコマンドを使用して Oracle でユーザーを削除すると、これらの他のすべてのトリガーも削除されますか?

SQL>ドロップ ユーザー 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 に答える