【ぷろしーじゃ】

プロシージャ とは?

最終更新:
💡 名前で呼び出す、処理のまとまり

一連の処理をまとめ、名前で呼び出して実行する手続き。DBのストアドプロシージャを例に、関数との違い、出力引数、呼び出し方と権限の確認を解説します。

📌 このページのポイント
プロシージャ:保存した手続きを呼ぶ呼び出し元CALL do_db_maintenance();実行を依頼DB内の定義済みプロシージャまとめた処理を実行する出力引数で結果を返すものもあるPostgreSQLの例:実行権限も必要関数との区別や条件はDB・言語による
公式CALL資料の名前を使った説明例で、手続きが定義済みであることを前提とします。呼出しの矢印は一切データを返せない意味ではなく、性能や安全も処理・構成によります。
ひよこ ひよこ
プロシージャは、何をまとめるの?
ペンギン先生 ペンギン先生
名前で呼び出して実行する一連の処理だ。DBでは保存した手続きをストアドプロシージャと呼ぶ。例えば集計などの処理をまとめて呼び出す使い方があるよ。
ひよこ ひよこ
関数とは、必ず別なの?
ペンギン先生 ペンギン先生
区別は言語やDBによる。PostgreSQLでは、関数は式や問い合わせの一部として使い、プロシージャはCALLで呼び出す。関数の戻り値はないが、出力引数で呼び出し元へデータを返せる。
ひよこ ひよこ
どうやって呼び出すの?
ペンギン先生 ペンギン先生
PostgreSQLなら「CALL do_db_maintenance();」のように名前と引数を指定する。この例は公式資料にある呼び方で、その名前のプロシージャが定義済みである必要があるよ。
ひよこ ひよこ
DB側にまとめれば、必ず速くなる?
ペンギン先生 ペンギン先生
通信の回数を減らせる場合はあるが、速さは処理と構成による。処理の置き場所を選び、実行時間や変更・テストの方法も確認する。プロシージャなら自動的に高速という保証ではない。
ひよこ ひよこ
呼び出せれば、テーブルも自由に更新できる?
ペンギン先生 ペンギン先生
実行権限と、誰の権限で処理を動かすかを確認しよう。PostgreSQLのCREATE PROCEDUREには、呼び出したユーザーと定義者の権限で動かす選択がある。プロシージャを使うだけで安全になるわけではない。
もっと詳しく知りたい人へ

プロシージャの中でCOMMITしてもよい?

DBと呼び出し条件によります。PostgreSQLでは、明示的なトランザクションブロック内からCALLした場合、呼び出されたプロシージャでトランザクション制御はできません。定義時の条件にも制約があるため、対象DBの資料を確認します。

出力引数があると、CALLの結果はどうなる?

PostgreSQLでは、出力引数の値を含む結果行が返ります。これは関数のRETURNSによる戻り値とは別の仕組みです。「プロシージャは一切データを返さない」と覚えないようにします。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「プロシージャ」って出てきたら「名前で呼び出して実行する、処理のまとまり」と思えばだいたいOK!
📖 おまけ:英語の意味
「Procedure」 = 手順・手続き
💬 プログラミング言語やDBにより具体的な仕様は違います。このページは主にPostgreSQLのDBプロシージャを例にし、すべての言語に同じ区別を当てはめません。

参考資料

← 用語集にもどる