ストアドプロシージャ(stored procedure)

分類
テクノロジ系 データベース
出る試験
基本情報応用情報
重要度
★★★☆☆

一連の処理をデータベース側に登録しておき、名前を呼ぶだけで実行させる仕組み。やりとりの回数が減る。

もう少し詳しい説明

ストアドプロシージャは、一連の処理をデータベース側に登録しておき、名前を呼ぶだけで実行させる仕組みです。

stored は「保存された」、procedure は「手続き」です。データベースの中に保存された手続き、という意味になります。

何が減るのか

いちばんの利点は、やりとりの回数です。

たとえば「受注を1件登録する」という処理が、次の3段だったとします。

  1. 在庫を確認する
  2. 在庫を減らす
  3. 受注表に1行入れる

ストアドプロシージャを使わない場合、クライアントはSQLを1本送って結果を受け取り、また1本送って……を3往復します。

ストアドプロシージャにしておけば、送るのは「受注登録」という名前と引数だけです。

使わないときSQL①結果SQL②結果SQL③結果使うとき呼び出し1回結果
減るのは、クライアントとサーバのあいだの往復です。処理そのものが減るわけではありません。計算する場所がクライアントからサーバへ移るので、サーバ側の負荷はむしろ増えます。「サーバが軽くなる」と書いてある選択肢は誤りです。

1往復で済みます。 回線が遅いほど、この差が効きます。

ほかの利点

利点中身
通信が減る往復の回数とデータ量が減る
実行が速い構文解析や実行計画の作成が、登録時に済んでいる
やり方をそろえられる同じ処理を、どのアプリからも同じ手順で呼べる
権限を絞れる表への直接の権限を与えず、プロシージャの実行だけを許す
SQLインジェクションに強い文字列を組み立てず、引数として渡す

権限の話は見落とされやすいところです。表そのものへのUPDATE権限を渡さずに、「受注登録」の実行権限だけを渡せます。決まった手順以外では書き換えられません。

代わりに起きること

利点だけではありません。

起きること中身
サーバ(要求を受け取って、応えを返す側の機械)の負荷が増える処理がサーバ側で動く。クライアントは楽になる
製品を替えにくくなる書き方がDBMSごとに違う
中身が見えにくいアプリのソースを読んでも処理が書かれていない

「サーバの負荷が軽くなる」は誤りです。通信は減りますが、計算する場所がクライアントからサーバへ移っただけで、サーバ側の仕事は増えます。ここは選択肢によく出ます。

トリガとの違い

名前の並びで一緒に出てくるのがトリガです。

誰が動かすか
ストアドプロシージャ呼ばれたときに動く
トリガ表に対する変更(INSERT・UPDATE・DELETE)をきっかけに、自動で動く

呼ばれて動くか、きっかけで勝手に動くかが違いです。トリガは「商品表が更新されたら、履歴表に1行残す」のような使い方をします。

試験ではこう出る

科目A(旧・午前)では、「クライアントとサーバ間の通信量が減る」がそのまま正解の選択肢になります。

誤答としてよく置かれるのが、「サーバの負荷が軽くなる」です。減るのは通信で、サーバの処理は増えます。

トリガとの違いも出ます。「表の更新を契機に自動実行される」と書いてあればトリガです。

応用情報では、どこに処理を置くかという文脈で出ます。クライアント側に処理を寄せるか、サーバ側に寄せるかの判断材料として、通信量・サーバ負荷・移植性を比べる形です。

関連する用語

SQLの句
ストアドプロシージャの中身は、まとめて登録したSQL
クライアントサーバシステム
処理をどちら側に置くか。これはサーバ側に寄せる例
トランザクション
複数の更新をひとまとめにする。プロシージャの中でよく使う
SQLインジェクション
文字列を組み立てないので、対策としても効く

ミニクイズ

ストアドプロシージャを利用する利点として、最も適切なものはどれか。

正解は 1番:クライアントとサーバの間でやりとりする回数とデータ量が減る

ストアドプロシージャは、一連の処理をあらかじめサーバ側に登録しておき、クライアントは名前と引数を送るだけで実行させる仕組みです。SQL文を1本ずつ送って結果を受け取る往復がなくなるため、通信の回数とデータ量が減ります。保存できるデータ量は変わりません。処理はサーバ側で動くので、サーバの負荷はむしろ増える方向で、軽くなるとは限りません。正規化は設計で人が行うことで、自動化されるものではありません。

間違えた用語の復習リストを見る →

この分野をまとめて解く → データベースのミニテスト(全35問)

最終更新:2026-10-20