OracleのInsert,Update,Deleteトリガーの実装方法、無効化、有効化、削除方法、更新方法

データベース,SQL データベース
データベース

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トリガーの基本的な実装方法、無効化、有効化、削除、更新方法について解説しました。

トリガーを活用することで、データ操作時に自動的な処理が実行されるため、データ整合性の保持や操作ログの記録など、多様なシナリオで役立ちます。

ぜひ、サンプルコードを参考に実際のプロジェクトで活用してみてください。

タイトルとURLをコピーしました