【ぷろしーじゃ】
プロシージャ とは?
最終更新:
💡 名前で呼び出す、処理のまとまり
一連の処理をまとめ、名前で呼び出して実行する手続き。DBのストアドプロシージャを例に、関数との違い、出力引数、呼び出し方と権限の確認を解説します。
📌 このページのポイント
- 一連の処理をまとめて呼び出せる手続き
- DB内に保存するものはストアドプロシージャと呼ぶ
- 関数との区別や呼び出し方は、DB・言語による
- 結果を出力引数などで返すプロシージャもある
プロシージャは、何をまとめるの?
名前で呼び出して実行する一連の処理だ。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プロシージャを例にし、すべての言語に同じ区別を当てはめません。