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
が再度変更されるまで、この従業員のトリガーはデータベースによって自動的には起動されません。
関連トピック