2

ドロップ ユーザー イベントでトリガーを作成できますか? その場合、トリガーをどのように記述すればよいですか - * ユーザーを削除した後、そのユーザーに関連するいくつかの行をテーブルから削除したい *

「ユーザーを落とす」

例を挙げていただけますか:

ユーザーがドロップされ、オラクルがユーザーのスキーマオブジェクトを削除した場合、とにかくそこにあり、保持または削除するデータの行を選択できますか?

ユーザードロップイベントでトリガーを作成できないと言っているのですか?

4

2 に答える 2

2

もちろんできます。テーブルではなくユーザーを実際に削除すると仮定します。

スキーマ トリガーやデータベース トリガーではなく、システム トリガーを探しています。を含む多数のddl イベントDROPにこれらを追加できます。

ドキュメントから引用するには:

DROP ステートメントがデータベース オブジェクトをデータ ディクショナリから削除するたびに、データベースがトリガーを起動するようにします。

トリガーは次のようになります。

create or replace trigger tr_drop_user
  before drop on database

begin
   if dbms_standard.dictionary_obj_type = 'USER' then

      insert into logs ( user, object_name )
      values ( sys_context('USERENV','OS_USER') -- OS User doing the dropping
             , dbms_standard.dictionary_obj_name -- name of object being dropped
              );

   end if;
end;
/

これは、特に十分に文書 dbms_standard化されていないパッケージを使用して、何が起こっているかを解決します。私の意見では、PSOUGのドキュメントの方が優れています。

データベース全体ではなく、特定のスキーマに対してのみこれを実行する場合は、before drop on schema代わりに使用します。


ちょっとした補足として、トリガーでこれを行う必要があるとは確信していません。トリガー内のロジックを偽装するよりも、必要なすべてを 1 か所で実行するプロシージャーを含むパッケージdrop_userを作成した方がよいでしょう。create_user

于 2012-08-24T07:41:04.257 に答える
0

triggerson ステートメント (DDLまたはDMLここにある一部のシステム レベル ステートメントを除いて) を作成することはできません。tablesトリガーは、データベース上でのみ作成できます。あなたの質問でdrop user <username>;は、ステートメントです。

私は引用します:

DROP USER ステートメントを使用して、データベース ユーザーを削除し、オプションでユーザーのオブジェクトを削除します。

ユーザーを削除すると、Oracle Databaseはそのユーザーのすべてのスキーマ・オブジェクトもごみ箱からパージします。

drop注 - 実際に を作成しようとしているか、 という名前のカスタム テーブルを作成userしようとしているかの混乱を考慮して、使用するステートメントを以下に示します。dropuser

DB ユーザーを削除するには -drop user username [cascade];

user という名前のテーブルを削除するには -drop table user [cascade constraints];

のオプション[ ]はオプションです。

于 2012-08-24T00:44:18.007 に答える