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?

PL/SQLで業務を自動化!トリガーの使い方と注意点をやさしく解説

Posted at

こんにちは、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のトリガーは、自動化の強い味方。 うっかりミスをそっと防ぎ、業務の信頼性を支えてくれます。

ちゃんと設計すれば、トリガーは静かに働く賢いパートナーになります。 はじめは「鳥?」と思っても、大丈夫です。私もそうでした。

おわりに 🐥

ここまで読んでくださってありがとうございました! 「トリガーってちょっと便利かも…」と思ってもらえたなら嬉しいです。

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?