ALTER TRIGGER文は、データベース・トリガーの有効化、無効化またはコンパイルを実行します。
前提条件
トリガーが自身のスキーマ内にある必要があります。自身のスキーマ内にない場合は、ALTER ANY TRIGGERシステム権限が必要です。
また、DATABASEに対するトリガーを変更するには、データベース・イベントに対するADMINISTERシステム権限が必要です。
構文
alter_trigger::=

compiler_parameters_clause::=

キーワードとパラメータの説明
schema
トリガーが含まれているスキーマを指定します。 schemaを省略すると、トリガーは自身のスキーマ内に存在するとみなされます。
変更するトリガーの名前を指定します。
ENABLEを指定すると、トリガーを有効にできます。 ALTER TABLEのENABLE ALL TRIGGERS句を使用して、表に関連付けられているすべてのトリガーを有効にすることもできます。 詳細は、『Oracle Database SQL言語リファレンス』のALTER TABLE文に関する項を参照してください。
DISABLEを指定すると、トリガーを無効にできます。 ALTER TABLEのDISABLE ALL TRIGGERS句を使用して、表に関連付けられているすべてのトリガーを無効にすることもできます。
RENAME TO new_nameを指定すると、トリガーの名前を変更できます。データベースによってトリガーの名前が変更され、トリガーの状態は名前の変更前と同じままになります。
トリガーの名前を変更すると、USER_SOURCE、ALL_SOURCEおよびDBA_SOURCEデータ・ディクショナリ・ビューに記憶されているトリガーのソースが再構築されます。 その結果、トリガー・ソースが変更されていない場合でも、これらのビューのTEXT列のコメントおよび書式設定が変更されることがあります。
COMPILEを指定すると、有効か無効かに関係なくトリガーを明示的にコンパイルすることができます。 明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、また、実行時のコンパイル・エラーとパフォーマンス上のオーバーヘッドもなくなります。
トリガーが依存するオブジェクトのいずれかが無効な場合、データベースによってそれらのオブジェクトが最初に再コンパイルされます。 トリガーは、データベースによって正常に再コンパイルされた場合に有効になります。
再コンパイル中、コンパイラの永続的なスイッチ設定はすべて削除され、セッションから再度取得されてコンパイルの最後に格納されます。 この処理を回避するには、REUSE SETTINGS句を指定します。
トリガーの再コンパイル時にコンパイル・エラーが発生した場合は、データベースによってエラーが戻され、トリガーは無効なままになります。 関連付けられているコンパイラ・エラー・メッセージは、SQL*PlusコマンドSHOW ERRORSを使用して確認できます。
DEBUGを指定すると、PL/SQLデバッガで使用するためのコードを生成して格納するようにPL/SQLコンパイラに指示できます。 この句を指定した場合の効果は、compiler_parameters_clauseでPLSQL_DEBUG = TRUEを指定した場合と同じです。
|
参照: ストアド・サブプログラムで使用可能な機能と同じ機能を使用したトリガーのデバッグの詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。 |
この句のトリガーに対する動作は、ファンクションに対する動作と同様です。 詳細は、「ALTER FUNCTION」の「compiler_parameters_clause」を参照してください。
この句のトリガーに対する動作は、ファンクションに対する動作と同様です。 詳細は、「ALTER FUNCTION」の「REUSE SETTINGS」を参照してください。
例
トリガーの無効化: 例 サンプル・スキーマhrには、employees表に作成されたupdate_job_historyという名前のトリガーがあります。 このトリガーは、UPDATE文によって従業員のjob_idが変更されるたびに起動されます。 このトリガーによって、従業員のID、最後のジョブの開始日と終了日およびジョブのIDと部門を含む行がjob_history表に挿入されます。
このトリガーは、作成後、データベースによって自動的に有効にされます。 その後、次の文を使用してこのトリガーを無効にすることができます。
ALTER TRIGGER update_job_history DISABLE;
トリガーが無効になっている場合は、UPDATE文によって従業員のジョブが変更されても、データベースによってトリガーは起動されません。
トリガーの有効化: 例 トリガーを無効にした後、次の文を使用してそのトリガーを有効にすることができます。
ALTER TRIGGER update_job_history ENABLE;
トリガーを再度有効にすると、UPDATE文の結果として従業員のジョブが変更されるたびに、データベースによってトリガーが起動されます。 トリガーが無効になっている場合に従業員のジョブが更新されると、別のトランザクションによってjob_idが再度変更されるまで、この従業員のトリガーはデータベースによって自動的には起動されません。
関連トピック