ストアドプロシージャ(stored procedure)
一連の処理をデータベース側に登録しておき、名前を呼ぶだけで実行させる仕組み。やりとりの回数が減る。
もう少し詳しい説明
ストアドプロシージャは、一連の処理をデータベース側に登録しておき、名前を呼ぶだけで実行させる仕組みです。
stored は「保存された」、procedure は「手続き」です。データベースの中に保存された手続き、という意味になります。
何が減るのか
いちばんの利点は、やりとりの回数です。
たとえば「受注を1件登録する」という処理が、次の3段だったとします。
- 在庫を確認する
- 在庫を減らす
- 受注表に1行入れる
ストアドプロシージャを使わない場合、クライアントはSQLを1本送って結果を受け取り、また1本送って……を3往復します。
ストアドプロシージャにしておけば、送るのは「受注登録」という名前と引数だけです。
1往復で済みます。 回線が遅いほど、この差が効きます。
ほかの利点
| 利点 | 中身 |
|---|---|
| 通信が減る | 往復の回数とデータ量が減る |
| 実行が速い | 構文解析や実行計画の作成が、登録時に済んでいる |
| やり方をそろえられる | 同じ処理を、どのアプリからも同じ手順で呼べる |
| 権限を絞れる | 表への直接の権限を与えず、プロシージャの実行だけを許す |
| SQLインジェクションに強い | 文字列を組み立てず、引数として渡す |
権限の話は見落とされやすいところです。表そのものへのUPDATE権限を渡さずに、「受注登録」の実行権限だけを渡せます。決まった手順以外では書き換えられません。
代わりに起きること
利点だけではありません。
| 起きること | 中身 |
|---|---|
| サーバ(要求を受け取って、応えを返す側の機械)の負荷が増える | 処理がサーバ側で動く。クライアントは楽になる |
| 製品を替えにくくなる | 書き方がDBMSごとに違う |
| 中身が見えにくい | アプリのソースを読んでも処理が書かれていない |
「サーバの負荷が軽くなる」は誤りです。通信は減りますが、計算する場所がクライアントからサーバへ移っただけで、サーバ側の仕事は増えます。ここは選択肢によく出ます。
トリガとの違い
名前の並びで一緒に出てくるのがトリガです。
| 誰が動かすか | |
|---|---|
| ストアドプロシージャ | 呼ばれたときに動く |
| トリガ | 表に対する変更(INSERT・UPDATE・DELETE)をきっかけに、自動で動く |
呼ばれて動くか、きっかけで勝手に動くかが違いです。トリガは「商品表が更新されたら、履歴表に1行残す」のような使い方をします。
試験ではこう出る
科目A(旧・午前)では、「クライアントとサーバ間の通信量が減る」がそのまま正解の選択肢になります。
誤答としてよく置かれるのが、「サーバの負荷が軽くなる」です。減るのは通信で、サーバの処理は増えます。
トリガとの違いも出ます。「表の更新を契機に自動実行される」と書いてあればトリガです。
応用情報では、どこに処理を置くかという文脈で出ます。クライアント側に処理を寄せるか、サーバ側に寄せるかの判断材料として、通信量・サーバ負荷・移植性を比べる形です。
関連する用語
- SQLの句
- ストアドプロシージャの中身は、まとめて登録したSQL
- クライアントサーバシステム
- 処理をどちら側に置くか。これはサーバ側に寄せる例
- トランザクション
- 複数の更新をひとまとめにする。プロシージャの中でよく使う
- SQLインジェクション
- 文字列を組み立てないので、対策としても効く
ミニクイズ
ストアドプロシージャを利用する利点として、最も適切なものはどれか。
正解は 1番:クライアントとサーバの間でやりとりする回数とデータ量が減る
ストアドプロシージャは、一連の処理をあらかじめサーバ側に登録しておき、クライアントは名前と引数を送るだけで実行させる仕組みです。SQL文を1本ずつ送って結果を受け取る往復がなくなるため、通信の回数とデータ量が減ります。保存できるデータ量は変わりません。処理はサーバ側で動くので、サーバの負荷はむしろ増える方向で、軽くなるとは限りません。正規化は設計で人が行うことで、自動化されるものではありません。
この分野をまとめて解く → データベースのミニテスト(全35問)
最終更新:2026-10-20