ストアドプロシージャ 【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文などでデータベースの内容を変更する操作は行わないことが多い。

(2020.7.31更新)

他の用語辞典による「ストアドプロシージャ」の解説 (外部サイト)

資格試験などの「ストアドプロシージャ」の出題履歴

▼ 基本情報技術者試験
令7修7 問18】 データベースサーバを利用したクライアントサーバシステムにおいて,大量のSQL文が発生することによってクライアントとサーバ間の通信負荷が問題となった。
令3修1 問25】 ストアドプロシージャの利点はどれか。
令2修7 問25】 クライアントサーバシステムにおいて,利用頻度が高い命令群をあらかじめサーバ上のDBMSに格納しておくことによって,クライアントサーバ間のネットワーク負荷を軽減する仕組みはどれか。
平31修1 問26】 クライアントサーバシステムにおいて,利用頻度が高い命令群をあらかじめサーバ上のDBMSに格納しておくことによって,クライアントサーバ間のネットワーク負荷を軽減する仕組みはどれか。
平29秋 問26】 クライアントサーバシステムにおいて,利用頻度が高い命令群をあらかじめサーバ上のDBMSに格納しておくことによって,クライアントサーバ間のネットワーク負荷を軽減する仕組みはどれか。
平28修12 問26】 データベースサーバを利用したクライアントサーバシステムにおいて,大量のSQL文が発生することによってクライアントとサーバ間の通信負荷が問題となった。
平28修7 問26】 クライアントサーバシステムにおいて,利用頻度が高い命令群をあらかじめサーバ上のDBMSに格納しておくことによって,クライアントサーバ間のネットワーク負荷を軽減する仕組みはどれか。
平27春 問27】 クライアントサーバシステムにおいて,クライアント側からストアドプロシージャを利用したときの利点として,適切なものはどれか。
平26修7 問26】 データベースサーバを利用したクライアントサーバシステムにおいて,大量のSQL文が発生することによってクライアントとサーバ間の通信負荷が問題となった。
平25秋 問28】 クライアントサーバシステムにおいて,利用頻度の高い命令群をあらかじめサーバ上のDBMSに用意しておくことによって,データベースアクセスのネットワーク負荷を軽減する仕組みはどれか。
平24修6 問29】 データベースサーバを利用したクライアントサーバシステムにおいて,大量のSQL文が発生することによってクライアントとサーバ間の通信負荷が問題となった。
平22修12 問31】 データベースサーバを利用したクライアントサーバシステムにおいて,大量のSQL文が発生することによってクライアントとサーバ間の通信負荷が問題となった。
平21修12 問30】 クライアントサーバシステムにおいて,データベースにアクセスするときに,利用頻度の高い命令群をあらかじめサーバに用意しておくことによって,ネットワーク負荷を軽減できる機能はどれか。
平21修6 問30】 ストアドプロシージャの利点はどれか。
平21春 問31】 データベースサーバを利用したクライアントサーバシステムにおいて,大量のSQL文が発生することによってクライアントとサーバ間の通信負荷が問題となった。