トリガー
トリガーの基本概念
トリガーは、特定のイベント(INSERT、UPDATE、DELETE)がテーブルに対して実行されたときに、自動的に実行されるストアドプログラムです。トリガーを使用することで、データベースの一貫性と整合性を保つための自動処理を実装できます。
トリガーの種類
- 行レベルトリガー: 各行の変更に対して実行されるトリガー。
- 文レベルトリガー: SQL文の実行全体に対して実行されるトリガー。
トリガーの作成と使用
例: 行レベルトリガーの作成
従業員の給与が変更されたときに、変更履歴をログに記録するトリガーを作成します。
CREATE OR REPLACE TRIGGER trg_employee_salary_change
AFTER UPDATE OF salary ON employees -- employeesテーブルのsalary列が更新された後にトリガーを実行
FOR EACH ROW -- 更新された各行に対してトリガーを実行
BEGIN
-- salary_historyテーブルに更新前と更新後の給与情報を挿入
INSERT INTO salary_history (employee_id, old_salary, new_salary, change_date)
VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE); -- :OLDと:NEWで更新前と更新後の値にアクセス
END;
例: 文レベルトリガーの作成
employeesテーブルに対するINSERT文が実行された後に、挿入操作の概要をログに記録する文レベルトリガーの例です。
CREATE OR REPLACE TRIGGER trg_employee_insert_log
AFTER INSERT ON employees -- employeesテーブルへのINSERT文実行後にトリガーを実行
DECLARE
v_row_count NUMBER; -- 挿入された行数を格納する変数
BEGIN
-- 挿入された行数をカウント
SELECT COUNT(*) INTO v_row_count FROM employees;
-- トリガーログテーブルに挿入操作の概要を記録
INSERT INTO trigger_log (event_type, table_name, log_date, row_count)
VALUES ('INSERT', 'employees', SYSDATE, v_row_count);
END;
トリガーの利点
- 自動化: データの変更に対する自動処理を実装できる。
- データ整合性の維持: データの変更に対して、追加の検証や処理を自動的に実行できる。
- 監査とログ: データの変更履歴を自動的に記録できる。
トリガーの注意点
- **トリガー内の処理が複雑になると、パフォーマンスに影響を与える可能性がある。
- **トリガーはデバッグが難しい場合があるため、ロジックをシンプルに保つことが重要。