アプリ側でSQL書くのと何が違うの?
アプリ側のSQLはリクエストごとにパース→最適化→実行される。ストアドプロシージャは初回だけコンパイルされ、以降はキャッシュされた実行計画を使う。また複数のSQLをDB側でまとめて実行するから、アプリ↔DB間のネットワーク往復が減る。大量データの一括処理では特に差が出るよ
デメリットは?
①デバッグが困難(アプリ側のデバッガが使えない)、②バージョン管理が面倒(DDL文としてGit管理するか、マイグレーションツールが必要)、③DB固有のSQL方言に依存(MySQLとPostgreSQLで書き方が違う)、④テストが書きにくい。最近はORMの発達でストアドプロシージャの利用は減少傾向だよ
今でも使うべき場面は?
①大量データの一括処理(夜間バッチ等)、②セキュリティ(テーブルへの直接アクセスを禁止してプロシージャ経由のみにする)、③レガシーシステムの保守、④DB間のデータ連携。新規開発ではアプリ側にロジックを持つのが主流だけど、パフォーマンスクリティカルな処理にはまだ出番があるよ
IPA試験でのポイントは?
「ストアドプロシージャのメリットを3つ挙げよ」→①事前コンパイルによる高速実行、②ネットワークトラフィックの削減、③セキュリティ(直接テーブルアクセス不要)。トリガー(特定操作で自動実行されるプロシージャ)との違いも押さえておこう。トリガーはINSERT/UPDATE/DELETEに連動して自動起動するよ