【すとあどぷろしーじゃ】

ストアドプロシージャ とは?

最終更新:
💡 DBに置いた処理手順を、名前で呼び出す

データベース側に定義して、名前で呼び出せる処理手順。SQLなどをまとめて再利用し、複数の処理をDB側で行える。書き方・権限・実行計画の扱いは製品によって異なる。

📌 このページのポイント
ストアドプロシージャ:DBの処理手順アプリ入力値を渡す結果を受け取るDBサーバー保存した処理手順① データを確認② データを更新呼出応答SQLをまとめ、名前で呼び出せる速さは、SQL・通信・実行計画でも変わるよ
アプリが入力値を渡し、DB側の手順を呼び出す例。命令や結果の形式は製品で異なります。
ひよこ ひよこ
アプリでSQLを書くのと、何が違う?
ペンギン先生 ペンギン先生
処理の手順をDB側に置いて、アプリなどから名前で呼び出せるんだ。例えば注文処理の複数の操作をまとめ、入力値を渡して実行する。SQL ServerはT-SQLなど、PostgreSQLはSQLやPL/pgSQLなどで定義できるよ。
ひよこ ひよこ
保存すれば、必ず速くなる?
ペンギン先生 ペンギン先生
必ずではないよ。SQL Serverでは通常、最初の実行で作った計画を再利用するけれど、データの変化によって遅くなり再コンパイルが役立つ場合もある。DB側に処理をまとめて通信を減らす効果と、SQL自体の効率は分けて確認しよう。
ひよこ ひよこ
使うだけで、データを安全にできる?
ペンギン先生 ペンギン先生
呼び出しを許可し、テーブルを直接触る権限を制限する設計はできるよ。ただし製品・設定による。例えばPostgreSQLは、標準では呼び出し元の権限で実行し、定義者の権限で動かす方式もある。プロシージャを作るだけで、権限が安全に整うわけではないんだ。
ひよこ ひよこ
関数やトリガーと同じもの?
ペンギン先生 ペンギン先生
別の呼び出し方や役割があるよ。PostgreSQLでは関数をクエリ内で使い、プロシージャはCALLで単独に呼び出す。処理をDB側に置くときは、DB固有の書き方、変更手順、テストも一緒に管理しよう。名前の似た仕組みを全製品で同じと考えないでね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ストアドプロシージャ」って出てきたら「DB側に保存し、名前で呼び出す処理手順」と思えばだいたいOK!
📖 おまけ:英語の意味
「Stored Procedure」 = 格納された手続き
💬 Stored(保存された)Procedure(手続き)。DBサーバー内に処理を保存しておくよ

参考資料

← 用語集にもどる