トリガーは、OceanBaseデータベースにおいてOracleテナント向けに提供される機能であり、プロシージャや関数と同様に、宣言、実行、例外処理を含むPLブロックです。トリガーは特定のイベントに基づいて実行され、イベントの前または後にトリガーが発火するかどうか、またトリガーが単一のイベントに対して発火するか、あるいはイベントの実行によって影響を受ける特定の行データに対して発火するかを指定できます。
トリガーは独立したオブジェクトであり、特定のイベントが発生すると自動的に暗黙的に実行されます。また、トリガーはパラメータを受け取ることができません。ここで言うイベントとは、データベースのテーブルに対するINSERT、UPDATE、DELETE操作を指します。
注意
OceanBaseデータベースV2.2.7xおよびそれ以前のバージョンでは、テーブル上の行レベルトリガーのみがサポートされています。
単純なトリガーの発火タイミングには、以下の4つのポイントがあります:
イベントの実行前(ステートメントレベルのBEFOREトリガー)
イベントの実行後(ステートメントレベルのAFTERトリガー)
各行がイベントの実行によって影響を受ける前(行レベルのBEFOREトリガー)
各行がイベントの実行によって影響を受けた後(行レベルのAFTERトリガー)
1つのDMLステートメントは複数の単純なトリガーをトリガーする可能性があり、その実行順序は以下の通りです:ステートメントレベルのBEFOREトリガー -> 行レベルのBEFOREトリガー -> 行レベルのAFTERトリガー -> ステートメントレベルのAFTERトリガー。同一タイプのトリガー間での実行順序は不確定であり、現時点ではトリガーの実行順序を指定することはサポートされていません。
トリガーは単純なものもあれば、複合的なものもあります。OceanBaseデータベースは現在、主に以下の種類のDMLトリガーをサポートしています:
行レベルトリガー
ステートメントレベルトリガー
INSTEAD OFトリガー
INSTEAD OFトリガーは、編集可能なビューおよび編集不可能なビュー上に作成でき、ビューの更新に使用されます。
複合トリガー
1つの複合トリガーには、行前、行後、ステートメント前、ステートメント後の4種類のトリガーイベントのうち1つから4つまで、またはINSTEAD OFトリガーイベントのみを含むことができます。