CREATE TRIGGER
目的
トリガーはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
CREATE
TRIGGER
文を使用すると、データベース・トリガーを作成できます。データベース・トリガーとは、次のとおりです。
-
表、スキーマまたはデータベースに対応したストアドPL/SQLブロック
-
無名PL/SQLブロック、あるいはPL/SQLまたはJAVAで実装されているプロシージャへのコール
Oracle Databaseでは、指定した条件が発生するとトリガーは自動的に実行されます。
関連項目:
「ALTER TRIGGER」および「DROP TRIGGER」を参照してください。
前提条件
自分のスキーマ内の表または自分のスキーマ(SCHEMA
)に対するトリガーを自分のスキーマ内に作成する場合は、CREATE
TRIGGER
システム権限が必要です。
任意のスキーマまたは別のユーザーのスキーマ(schema.SCHEMA
)内の表に対するトリガーを任意のスキーマ内に作成する場合は、トリガーが作成されるスキーマと表が存在するスキーマの両方で、スキーマ・レベルのCREATE ANY TRIGGER
権限が必要です。または、CREATE ANY TRIGGER
システム権限が必要です。
前述の権限に加えて、DATABASE
に対するトリガーを作成する場合は、ADMINISTER
DATABASE
TRIGGER
システム権限が必要です。
プラガブル・データベース(PDB)に対するトリガーを作成する場合は、現在のコンテナがそのPDBである必要があります。また、ADMINISTER
DATABASE
TRIGGER
システム権限が必要です。PDBの詳細は、『Oracle Database管理者ガイド』を参照してください。
前述の権限に加えて、crosseditionトリガーを作成する場合は、エディションが有効になっている必要があります。ユーザーに対するエディションの有効化の詳細は、『Oracle Database開発ガイド』を参照してください。
トリガーがSQL文を発行、またはプロシージャやファンクションをコールする場合、そのトリガーの所有者には、これらの操作を行うための権限が必要です。これらの権限は、ロールを介して付与するのではなく、所有者に直接付与する必要があります。
構文
トリガーはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
create_trigger::=
(plsql_trigger_source
: 『Oracle Database PL/SQL言語リファレンス』を参照。)
セマンティクス
IF NOT EXISTS
IF NOT EXISTS
を指定すると、次の効果が得られます。
-
トリガーが存在していない場合は、文の最後に新しいトリガーが作成されます。
-
トリガーが存在している場合、これは文の最後の時点にあるトリガーになります。古いものが検出されるため、新しいものは作成されません。
単一の文には、一度に1つのOR REPLACE
またはIF NOT EXISTS
を指定できます。同じ文でOR REPLACE
とIF NOT EXISTS
の両方を使用すると、ORA-11541: REPLACE and IF NOT EXISTS cannot coexist in the same DDL statement
というエラーが発生します。
IF EXISTS
はCREATE
とともに使用すると、ORA-11543: Incorrect IF NOT EXISTS clause for CREATE statement
が発生します。
[ EDITIONABLE | NONEDITIONABLE ]
この句を使用すると、schema
のスキーマ・オブジェクト・タイプTRIGGER
のエディショニングが有効化されたときに、そのトリガーをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLE
です。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。
NONEDITIONABLEの制限事項
crosseditionトリガーに対してNONEDITIONABLE
を指定できません。
plsql_trigger_source
plsql_trigger_source
の構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。