ストアドプロシージャ 【stored procedure】 ストアードプロシージャ
概要
ストアドプロシージャ(stored procedure)とは、データベース管理システム(DBMS)の機能の一つで、データベースに対する連続した複数の処理を一つのプログラムにまとめ、データと共に保存できるようにしたもの。処理はDBMS側で行われ、外部からはクエリを発行するのと同じ手順で実行できる。SQL文や専用の言語を組み合わせて処理手順を記述しDBMSに保存すると、すぐに実行可能な形式に変換されて外部から呼び出し可能な状態になる。複数のSQL文を組み合わせた複雑な処理を記述でき、一度の呼び出しでまとめて実行することができる。条件分岐やループなどの制御構文、変数、例外処理など一般のコンピュータプログラムと変わらない高度な機能を利用できる場合もある。
外部のプログラムからSQL文を発行してデータを受け取り処理する場合に比べ、すでにSQL文の構文解析などが済んだ状態で保存されているため高速に実行することができ、また、DBMSから呼び出し側へSQL文の実行結果を受け渡すのにかかる時間や帯域幅も節約できる。
また、ストアドプロシージャの保存も実行もDBMS自体の機能であるため、呼び出し側のシステムやプログラミング言語などの種類や環境に依らず同じように利用できる。SQLによる操作をストアドプロシージャ側にまとめることで、呼び出し側プログラムのソースコードからSQL文を排除して読みやすさや保守性を向上させることも可能である。
処理の記述に用いられる言語は、SQLの標準規格であるSQL99から定義された「SQL/PSM」(Persistent Stored Module)という標準が一応は存在するが、Oracle Databaseの「PL/SQL」やMicrosoft SQL Serverの「Transact-SQL」など各DBMS独自の言語を用いるのが一般的で、互換性は低いのが現状である。
また、汎用のプログラミング言語に比べ機能や拡張性、開発ツールなどの環境は劣るため、過度に処理内容をストアドプロシージャ側に寄せようとすることで却ってシステム全体の生産性や保守性を下げてしまう場合もある。
ストアドファンクション (stored function)
データベースに対する連続した複数の処理を関数(function)の形でまとめ、必要に応じて呼び出せるようにしたものを「ストアドファンクション」という。基本的な仕組みはストアドプロシージャと同じで、SQL文やプログラミング言語を組み合わせて処理を記述し、一括して実行できるようデータベース内に保存しておく。
ストアドプロシージャとの違いは呼び出し側への返り値の有無で、ストアドファンクションは関数であるため実行結果を何らかの値として返却する。利用できる機能などに違いは無いことが多いが、入力値の変換や判定などに用いられることが多く、UPDATE文やDELETE文などでデータベースの内容を変更する操作は行わないことが多い。