情報処理試験を勉強していると、「ストアドプロシージャって何?普通に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つずつ送信する場合)
▼ ストアドプロシージャを使った場合(CALL文1回で完結)
📦 DBMS内部で自動実行(ネットワーク通信なし)
📌 ポイント:何が減って、何が減らないのか
| 項目 | 減るか? | 理由 |
|---|---|---|
| クライアント⇔サーバ間の通信回数 | ✅ 減る | 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の製品を変更する際に、手続き型言語の仕様が異なるため移植コストが発生します。試験では利点しか問われませんが、実務では利点とデメリットを天秤にかけて採用を判断します。