こんにちは、decoponです。
「トリガーを設定してください」と言われて、
頭の中に鳥のシルエットが浮かんだのは私だけでしょうか…。
PL/SQLのトリガーとは何か?どう使うのか?
そんな“そもそも”がわからなかった私が、業務でトリガーに救われた経験をもとに、初心者向けにやさしく解説してみました!
その“更新し忘れ”、トリガーで救えます
うっかり更新忘れ、履歴を残し忘れ…
そんな日々の業務トラブル、トリガーで防げるかもしれません!
トリガーとは「あるイベント(INSERT/UPDATEなど)をきっかけに自動で処理を実行する」PL/SQLの機能です。
トリガーとは?PL/SQLでできる“自動化”の仕組み
✅ BEFORE vs AFTER
タイミング | 処理 | よく使う場面 |
---|---|---|
BEFORE | DML実行前 | 値の整形やバリデーション |
AFTER | DML実行後 | ログ保存や履歴記録 |
✅ 行トリガー vs 文トリガー
-
FOR EACH ROW
→ 行ごとに発動 - 省略 → SQL文ごとに1回のみ
はじめてのトリガー ― 基本構文とやさしい例
CREATE OR REPLACE TRIGGER trg_auto_update_timestamp
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
:NEW.updated_at := SYSDATE;
END;
/
↑ これだけで、updated_atが自動更新されます!
実務で使えるトリガー活用例3選
🧾 価格変更履歴を残す
WHEN OLD.price <> NEW.price
→ 履歴テーブルにINSERT
🛠️ 明細更新に応じてヘッダー反映
AFTER INSERT/DELETE/UPDATE ON order_items
→ orders.total_amount を更新
🚫 禁止データのブロック
IF :NEW.email LIKE '%@example.com'
→ RAISE_APPLICATION_ERROR
トリガーを使うときの注意点と落とし穴
-
無限ループに注意!トリガー同士の干渉が原因になることも
-
発動条件は明確に。ログ出力で“見える化”が大事
-
チーム内共有も忘れずに。設計書や命名ルールを整備しましょう
トリガーが“効いてる”か確認する方法
🔍 確認SQL例
SELECT trigger_name, table_name, status
FROM user_triggers;
🧪 ソース取得
SELECT DBMS_METADATA.GET_DDL('TRIGGER', 'trg_name') FROM dual;
→ 実際に“効いてるか”はログや履歴テーブルで確認!
まとめ 〜安心して任せられる“自動処理の相棒”に
PL/SQLのトリガーは、自動化の強い味方。 うっかりミスをそっと防ぎ、業務の信頼性を支えてくれます。
ちゃんと設計すれば、トリガーは静かに働く賢いパートナーになります。 はじめは「鳥?」と思っても、大丈夫です。私もそうでした。
おわりに 🐥
ここまで読んでくださってありがとうございました! 「トリガーってちょっと便利かも…」と思ってもらえたなら嬉しいです。