ストアドプロシージャとは?初心者向けに画像多めで解説!
この記事では、ストアドプロシージャについて、初心者向けに画像多めで解説します。
この記事でわかること
・ストアドプロシージャとは何か
・なぜ処理をまとめておくのか
・ハンバーガー屋さんで例えるとどういうことか
・メリットと注意点
ストアドプロシージャとは?

ストアドプロシージャを一言でいうと、
「よく使うSQL処理を、Aセットのようにまとめて登録しておく仕組み」です。

よく使うSQL処理?

うん。たとえば、データベースに対して毎回同じような作業をすることが多いんだ。
「データを検索して、条件に合うものを更新して、結果を返す」みたいな処理。

そうなの?

そうなんだよ。そこで、その一連の処理をあらかじめデータベースに保存しておくんだ。
そして必要なときに、名前を呼び出すだけで実行できるようにする。
これがストアドプロシージャだよ。

データベースはいじったことないからよくわからないけど、よく使う処理をまとめておくんだね。
たとえ:ハンバーガー屋さんでの注文


ハンバーガー屋さんで考えてみようか。
毎回、店員さんにこう伝えるのは面倒だよね。
「ハンバーガーください」
「ポテトください」
「ドリンクください」

あぁこの注文がデータベースでいうところの毎回同じような処理なんだね。

そうだよ。この注文をセット化して、
「Aセットください」というだけで、以下3つの処理が行われるんだ。
「ハンバーガーください」
「ポテトください」
「ドリンクください」
こんな感じでストアドプロシージャも、複数のSQL処理をまとめておき、名前を呼び出すだけで実行できるんだ。

データベースとの対応表も置いておくね。

| 身近な例え | データベース |
|---|---|
| Aセット | ストアドプロシージャ名 |
| ハンバーガー・ポテト・ドリンク | 複数のSQL処理 |
| 「Aセットください」 | ストアドプロシージャを実行する |
| セット内容を厨房側で決めておく | 処理内容をDB側に保存しておく |
ストアドプロシージャの基本的な流れ


ストアドプロシージャの基本的な流れはこうだね。
① よく使う処理を決める
② その処理をデータベースに保存する
③ 名前を付ける
④ 必要なときに名前で呼び出す
⑤ まとめた処理が実行される

登録しておけば、名前を呼び出すだけで同じ動作をしてくれるんだね。
ストアドプロシージャのメリット

ストアドプロシージャのメリットをまとめておこうか。

① 同じ処理を何度も書かなくてよい
毎回同じSQLを書く必要がなくなります。
同じ処理をまとめておけば、呼び出すだけで使えます。
② 処理をまとめて管理しやすい
処理内容をデータベース側にまとめておけるので、
同じ処理をいろいろなアプリから使いやすくなります。
③ 複雑な処理をシンプルに呼び出せる
アプリ側から見ると、
注文処理を実行する
だけで済みます。
裏側で複数のSQLが動いていても、呼び出す側はシンプルになります。
④ 処理のミスを減らしやすい
毎回手作業でSQLを書くと、書き間違いが起きる可能性があります。
ストアドプロシージャとしてまとめておけば、同じ処理を安定して実行しやすくなります。
ストアドプロシージャのデメリット・注意点

デメリットもあるの?命令をまとめて置けるなら便利そうなんだけど。

基本的には便利なんだけどね。「ぱっと見」でわかりにくいんだ。

① 中身が見えにくくなることがある
呼び出す側から見ると、
注文処理
という名前だけに見えるため、
中で何をしているのか分かりにくくなることがあります。
② データベースに処理が寄りすぎることがある
本来アプリ側で管理した方がよい処理まで、データベース側に入れすぎると、全体の設計が複雑になることがあります。
③ データベース製品によって書き方が違う
Oracle、SQL Server、MySQL、PostgreSQLなどで、ストアドプロシージャの書き方や機能に違いがあります。
そのため、別のデータベースへ移行するときに修正が必要になることがあります。

「Aセット」だけでは、何が入っているかわからないし、
お店によって中身が違うもんね。

よく行くお店なら、「Aセット」だけで十分なんだけどね。
違うお店に行くと「Aセット」の中身がわからないよね。
同じように、データベースの製品によって、違ったりするんだ。
ストアドプロシージャはどんな場面で使うの?

実際にはどんなときに使われているの?


ストアドプロシージャは、たとえば次のような場面で使われるよ。
・毎月の売上を集計する処理
・注文データを登録して、在庫も減らす処理
・ユーザー情報を確認して、必要なデータを返す処理
・複数のテーブルをまとめて更新する処理
つまり、1回の作業に見えて、裏側では複数のSQLが動くような場面で使われることがあるんだね。
まとめ
ストアドプロシージャとは、データベースに保存しておく処理のまとまりです。
よく使うSQL処理をあらかじめまとめておき、名前を付けて呼び出せるようにします。
ポイントは次の通りです。
– ストアドプロシージャは、データベース側に保存する処理のまとまり
– よく使うSQLをセット化できる
– 複雑な処理を名前で呼び出せる
– 同じ処理を何度も書かなくてよい
– ただし、中身が見えにくくなったり、DB依存が強くなったりする点には注意が必要
一言でまとめるなら、ストアドプロシージャとは「SQLの定番処理をセットメニューのように登録しておく仕組み」です。

