情報処理試験を勉強していると、「ストアドプロシージャって何?普通にSQLを送るのと何が違うの?」と疑問に思うことがあります。

名前がカタカナで長いぶん、余計にとっつきにくい用語です。この記事では、日常の例え話と図解で仕組みと利点を整理し、試験で得点できる状態まで持っていきます。

対象試験と出題頻度

ストアドプロシージャは、基本情報技術者・応用情報技術者で出題されるテーマです。

クライアントサーバシステムにおける通信量削減の文脈で繰り返し問われており、トリガーとの混同を狙ったひっかけ選択肢が定番です。

詳細をクリックして確認
対象試験:
基本情報技術者
応用情報技術者
出題頻度:
★★★☆☆
ランクB(標準)覚えておくと有利

用語の定義

ストアドプロシージャ(Stored Procedure)とは、一言で言うと

 「データベースに対する一連のSQL処理をひとまとめにして、DBMS側にあらかじめ保存しておく仕組み

のことです。「Stored(保存された)+ Procedure(手続き)」、つまり「保存済みの手続き」が語源です。

イメージとしては、料理のセットメニューです。

レストランで「ハンバーグ」「サラダ」「スープ」を1品ずつ注文すると、注文のやり取りが3回発生します。しかし「Aランチ」とセットメニュー名を1回伝えれば、厨房側が3品をまとめて調理してくれます。注文する側と厨房のやり取りは1回で済むわけです。

ストアドプロシージャも同じで、クライアントからDBMSへの呼び出しは1回、あとはDBMS内部で事前登録済みの複数のSQL文が順番に実行されます。

📊 ストアドプロシージャの基本情報

項目 内容
英語名 Stored Procedure
分類 データベース技術(DBMS機能)
主な利点 ネットワーク通信量の削減、処理速度の向上
呼び出し方 クライアントからCALL文で実行

解説

なぜ登場したのか

クライアントサーバシステムでは、アプリケーション(クライアント)がネットワーク越しにDBMSへSQL文を送信します。処理内容が複雑になると、SQL文を何度もやり取りする必要があり、通信回数と転送量が膨れ上がります。

この問題を解消するために生まれたのがストアドプロシージャです。頻繁に使う一連の処理をDBMS側に事前登録しておけば、呼び出し1回で処理が完結します。

図解:通常のSQL実行との違い

▼ 通常のSQL実行(SQL文を1つずつ送信する場合)

クライアント(AP)
ネットワーク
DBMSサーバ
INSERT 在庫更新
━━━ ① 送信 ━━━▶
受信→解析→実行
結果受け取り
◀━━━ 応答 ━━━━
結果を返却
UPDATE 注文登録
━━━ ② 送信 ━━━▶
受信→解析→実行
結果受け取り
◀━━━ 応答 ━━━━
結果を返却
INSERT 履歴記録
━━━ ③ 送信 ━━━▶
受信→解析→実行
結果受け取り
◀━━━ 応答 ━━━━
結果を返却
合計:ネットワーク往復 3回 × 2(送信+応答)= 通信6回

▼ ストアドプロシージャを使った場合(CALL文1回で完結)

クライアント(AP)
ネットワーク
DBMSサーバ
CALL 注文処理()
━━━ ① 送信 ━━━▶
呼び出し受付

📦 DBMS内部で自動実行(ネットワーク通信なし)

1 INSERT 在庫更新
2 UPDATE 注文登録
3 INSERT 履歴記録
結果受け取り
◀━━━ 応答 ━━━━
最終結果を返却
合計:ネットワーク往復 1回 × 2(送信+応答)= 通信2回

📌 ポイント:何が減って、何が減らないのか

項目 減るか? 理由
クライアント⇔サーバ間の通信回数 ✅ 減る CALL文1回で済むため、往復回数が大幅に減少する
DBMS内部で実行されるSQL文の数 ❌ 減らない DBMS内部では同じ3本のSQLが実行される
DBMS内部の実行計画・バッファ ❌ 減らない 処理の実体は変わらないため、内部リソースは同等に必要
ディスクへのI/O回数 ❌ 減らない 書き込み・読み込みの対象データ量は変わらない

※ 試験では「減るもの」と「減らないもの」の区別がそのまま正答・誤答の根拠になる

ストアドプロシージャの利点まとめ

前述の図の通り、クライアントとDBMS間の往復が減ることが最大のメリットです。

加えて、処理ロジックをDBMS側に集約できるため、アプリケーション側のコード量が減り、処理の一貫性も保ちやすくなります。

利点 内容
通信量の削減 CALL文1回で複数のSQL処理が実行されるため、ネットワーク負荷が軽減される
処理速度の向上 事前にコンパイル・最適化されているため、都度SQL文を解析する場合より実行が速い
保守性の向上 処理ロジックをDBMS側に一元管理できるため、アプリケーション変更の影響を受けにくい

トリガーとの違い

ストアドプロシージャと混同されやすいのが「トリガー(Trigger)」です。

両者はDBMS内部に登録される処理という点では共通していますが、起動のきっかけがまったく異なります。

比較項目 ストアドプロシージャ トリガー
起動方法 クライアントからのCALL文で明示的に呼び出す INSERT/UPDATE/DELETEなどのイベント発生時に自動的に起動する
目的 定型的な一連の処理をまとめて実行する データ変更時に整合性チェックや連動処理を自動実行する
キーワード CALL文、明示的呼び出し イベント駆動、自動起動

ここだけは確実に押さえてください。「自動的に起動する」と書かれていたらトリガーであり、ストアドプロシージャではありません。

では、この違いが試験でどのように出題されるか見ていきましょう。

💡 ストアドプロシージャの核心を3行で

・一連のSQL処理をDBMS側に保存し、CALL文1回で実行できる仕組み
・最大の利点はクライアント-サーバ間の通信量削減
・トリガー(自動起動)とは起動方法がまったく異なる


試験ではこう出る!

ストアドプロシージャは、FE・APの午前問題で繰り返し出題されている定番テーマです。出題パターンは大きく2つに分かれます。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
AP R6春
午前 問25
ストアドプロシージャの利点を選ぶ問題。 ・正解は「通信量を減少させる」
・実行計画の数・バッファ数・I/O回数の削減はいずれも誤り
AP R5春
午前 問27
ストアドプロシージャの記述で「誤っているもの」を選ぶ問題。 ・「自動的に起動・実行する」はトリガーの説明であり誤り
・CALL文で実行、通信トラフィック軽減は正しい記述
FE R2免除
問25
ストアドプロシージャの利点を選ぶ問題(AP R6春 問25と同一構成)。 ・FEとAPで同じ問題が流用される典型例
FE H29秋
午前 問26
ネットワーク負荷を軽減する仕組みの名称を答える問題。 ・2相コミットメント、グループコミットメント、マルチスレッド化がひっかけ

📝 IPA試験での出題パターン

パターン1:「利点を選べ」
4つの選択肢に「通信量の削減」「実行計画の数の減少」「バッファ数の減少」「I/O回数の減少」が並びます。正解は「通信量の削減」一択です。DBMS内部の実行計画やバッファ、ディスクI/Oが減るわけではない点に注意してください。

 

パターン2:「誤った記述を選べ」または「用語名を答えよ」
AP R5春 問27のように「自動的に起動・実行する」という記述を混ぜてトリガーとの区別を試す形式です。FE H29秋 問26では逆に、説明文からストアドプロシージャの名称を選ばせる形式でした。

 

試験ではここまででOKです。実際の構文(CREATE PROCEDUREの書き方など)は午前問題では問われないので、深追いは不要です。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. クライアントサーバシステムにおいて、利用頻度の高い命令群をあらかじめサーバ上のDBMSに格納しておくことで、ネットワーク負荷を軽減する仕組みはどれでしょうか?

  • A. ストアドプロシージャ
  • B. 2相コミットメント
  • C. トリガー

正解と解説を見る

正解:A

解説:
一連のSQL処理をDBMSに保存し、CALL文1回で呼び出すことでクライアント-サーバ間の通信回数を減らせるのがストアドプロシージャです。FE H29秋 午前 問26でも同様の出題がありました。

選択肢Bの2相コミットメントは、分散データベース環境でトランザクションの原子性・一貫性を保証するための手法です。ネットワーク負荷の軽減とは無関係です。選択肢Cのトリガーは、テーブルへのINSERT/UPDATE/DELETEをきっかけに自動実行される処理であり、クライアントから明示的に呼び出すものではありません。


よくある質問(FAQ)

Q. ストアドプロシージャとストアドファンクションは何が違いますか?

ストアドプロシージャは「処理を実行する手続き」であり、戻り値を返さない(または出力パラメータで返す)のが基本です。一方、ストアドファンクション(ストアド関数)は「値を返す関数」であり、SELECT文の中で呼び出して使えます。IPA試験ではストアドファンクション単体での出題は少なく、問われるのはストアドプロシージャの利点に集中しています。

Q. ストアドプロシージャにセキュリティ上のメリットはありますか?

あります。アプリケーション側にSQL文を直接記述しなくて済むため、SQLインジェクション攻撃のリスクを低減できます。また、テーブルへの直接アクセス権限を与えず、ストアドプロシージャの実行権限だけを付与することで、データへのアクセス範囲を制限する運用も可能です。

Q. 実務ではどのデータベース製品で使えますか?

Oracle Database、Microsoft SQL Server、MySQL、PostgreSQLなど主要なRDBMS製品はすべてストアドプロシージャをサポートしています。ただし記述する手続き型言語の名称は製品ごとに異なり、OracleはPL/SQL、SQL ServerはT-SQL、PostgreSQLはPL/pgSQLを使います。IPA試験では特定の製品名は問われません。

Q. ストアドプロシージャにデメリットはありますか?

あります。処理ロジックがDBMS側に分散するため、アプリケーション側のソースコードだけでは全体の処理フローが把握しにくくなります。また、DBMSの製品を変更する際に、手続き型言語の仕様が異なるため移植コストが発生します。試験では利点しか問われませんが、実務では利点とデメリットを天秤にかけて採用を判断します。