0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQL】トリガー

Posted at

トリガー

トリガーの基本概念

トリガーは、特定のイベント(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;

トリガーの利点

  • 自動化: データの変更に対する自動処理を実装できる。
  • データ整合性の維持: データの変更に対して、追加の検証や処理を自動的に実行できる。
  • 監査とログ: データの変更履歴を自動的に記録できる。

トリガーの注意点

  • **トリガー内の処理が複雑になると、パフォーマンスに影響を与える可能性がある。
  • **トリガーはデバッグが難しい場合があるため、ロジックをシンプルに保つことが重要。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?