Oracleデータベースでは、トリガーを使用してデータ操作イベント(Insert、Update、Delete)に応じた自動的な処理を行うことができます。
本記事では、Insert、Update、Deleteに対するトリガーの作成方法やその無効化、有効化、削除、更新方法を解説します。
また、具体的なサンプルSQLとその実行結果も紹介し、実践的に活用できる情報を提供します。
Insert,Update,Deleteトリガーの基本
トリガーは、テーブルに対する特定の操作(Insert、Update、Delete)が行われた際に自動的に実行されるストアドプログラムです。
トリガーは、テーブルデータの整合性を保つためや、監査・ログの記録を行う際に利用されます。
Insertトリガーの実装方法
Insertトリガーは、テーブルに新しいレコードが挿入された時に実行されます。
以下に、Insertトリガーの基本的な構文とその実装例を示します。
CREATE OR REPLACE TRIGGER trg_insert_sample
AFTER INSERT ON sample_table
FOR EACH ROW
BEGIN
INSERT INTO log_table (log_message, created_at)
VALUES ('レコードが挿入されました', SYSDATE);
END;
このトリガーは、sample_table
に新しいレコードが挿入された際に、log_table
に挿入操作のログを記録するというものです。
Updateトリガーの実装方法
Updateトリガーは、既存のレコードが更新された際に実行されます。以下にUpdateトリガーの例を示します。
CREATE OR REPLACE TRIGGER trg_update_sample
AFTER UPDATE ON sample_table
FOR EACH ROW
BEGIN
INSERT INTO log_table (log_message, created_at)
VALUES ('レコードが更新されました', SYSDATE);
END;
このトリガーは、sample_table
のレコードが更新された場合に、log_table
に更新ログを記録します。
Deleteトリガーの実装方法
Deleteトリガーは、レコードが削除された時に実行されます。以下にDeleteトリガーのサンプルを示します。
CREATE OR REPLACE TRIGGER trg_delete_sample
AFTER DELETE ON sample_table
FOR EACH ROW
BEGIN
INSERT INTO log_table (log_message, created_at)
VALUES ('レコードが削除されました', SYSDATE);
END;
このトリガーは、sample_table
のレコードが削除された時に、その情報をlog_table
に記録します。
トリガーの無効化と有効化
トリガーは、一時的に無効化することが可能です。また、無効化されたトリガーを再度有効化することも簡単にできます。
トリガーの無効化
トリガーを無効化するには、以下のSQLを使用します。
ALTER TRIGGER trg_insert_sample DISABLE;
このコマンドは、trg_insert_sample
トリガーを無効化します。
無効化されたトリガーは、該当するイベントが発生しても実行されません。
トリガーの有効化
無効化されたトリガーを再度有効化するには、以下のSQLを使用します。
ALTER TRIGGER trg_insert_sample ENABLE;
このコマンドで、trg_insert_sample
が再度有効化され、通常通り実行されるようになります。
トリガーの削除
不要になったトリガーは、削除することができます。削除方法は以下のSQLを使用します。
DROP TRIGGER trg_insert_sample;
このコマンドで、trg_insert_sample
トリガーがデータベースから完全に削除されます。
トリガーの更新方法
既存のトリガーを更新(修正)するには、一度削除してから再作成する方法を使用します。
以下のように操作を行います。
トリガーの更新例
まず既存のトリガーを削除し、再度新しい仕様で作成します。
DROP TRIGGER trg_insert_sample;
CREATE OR REPLACE TRIGGER trg_insert_sample
AFTER INSERT ON sample_table
FOR EACH ROW
BEGIN
INSERT INTO log_table (log_message, created_at)
VALUES ('新しいトリガー仕様でレコードが挿入されました', SYSDATE);
END;
この手順でトリガーを更新することができます。
サンプルの実行結果
れでは、Insertトリガーを使った実際の実行結果を確認してみましょう。
まず、以下のSQLを実行してsample_table
にデータを挿入します。
INSERT INTO sample_table (id, name) VALUES (1, 'Test User');
次に、log_table
の内容を確認します。
SELECT * FROM log_table;
以下が実行結果の一例です。
LOG_MESSAGE | CREATED_AT
-------------------------------------|-------------------
レコードが挿入されました | 2024-10-01 12:00:00
まとめ
本記事では、OracleのInsert、Update、Deleteトリガーの基本的な実装方法、無効化、有効化、削除、更新方法について解説しました。
トリガーを活用することで、データ操作時に自動的な処理が実行されるため、データ整合性の保持や操作ログの記録など、多様なシナリオで役立ちます。
ぜひ、サンプルコードを参考に実際のプロジェクトで活用してみてください。