ドロップ ユーザー イベントでトリガーを作成できますか? その場合、トリガーをどのように記述すればよいですか - * ユーザーを削除した後、そのユーザーに関連するいくつかの行をテーブルから削除したい *
「ユーザーを落とす」
例を挙げていただけますか:
ユーザーがドロップされ、オラクルがユーザーのスキーマオブジェクトを削除した場合、とにかくそこにあり、保持または削除するデータの行を選択できますか?
ユーザードロップイベントでトリガーを作成できないと言っているのですか?
もちろんできます。テーブルではなくユーザーを実際に削除すると仮定します。
スキーマ トリガーやデータベース トリガーではなく、システム トリガーを探しています。を含む多数の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
triggers
on ステートメント (DDL
またはDML
、ここにある一部のシステム レベル ステートメントを除いて) を作成することはできません。tables
トリガーは、データベース上でのみ作成できます。あなたの質問でdrop user <username>;
は、ステートメントです。
私は引用します:
DROP USER ステートメントを使用して、データベース ユーザーを削除し、オプションでユーザーのオブジェクトを削除します。
ユーザーを削除すると、Oracle Databaseはそのユーザーのすべてのスキーマ・オブジェクトもごみ箱からパージします。
drop
注 - 実際に を作成しようとしているか、 という名前のカスタム テーブルを作成user
しようとしているかの混乱を考慮して、使用するステートメントを以下に示します。drop
user
DB ユーザーを削除するには -drop user username [cascade];
user という名前のテーブルを削除するには -drop table user [cascade constraints];
のオプション[ ]
はオプションです。