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