トリガーは、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トリガーは、編集可能なビューと編集不可能なビューに作成でき、ビューの更新に使用されます。
組み合わせトリガー
組み合わせトリガーには、行前、行後、ステートメント前、ステートメント後の4種類のトリガーイベントのうち、1つから4つを含めるか、INSTEAD OFトリガーイベントのみを含めることができます。