ストアドプロシージャとは? わかりやすく解説

Weblio 辞書 > コンピュータ > IT用語辞典 > ストアドプロシージャの意味・解説 

ストアドプロシージャ

【英】stored procedure

ストアドプロシージャとは、データベースシステムにおいて、一つ上の手続き定義したのである

手続きSQL文以外にもデータベースシステム独自の制御構文記述することが可能で、これにより条件分岐繰り返し理などの複雑な処理を実行することが可能となっている。

ある処理を実行する場合一つSQL文では全てのことを処理できない場合出てくる。たとえば、会社銀行口座から出金して従業員口座給料振り込むことを考えた場合出金入金二つの処理が必要となる。このような場合、ストアドプロシージャにより出金入金の処理を定義すれば、2つの処理を一つのストアドプロシージャの実行済ませることが出来る。

このように、ストアドプロシージャは定型処理を事前登録して処理の簡便化を図ることが出来る。さらに、ストアドプロシージャ作成時にSQL構文事前にチェックされているため、実行時構文解析スキップされ、処理効率アップにも効果的である。

データベースのほかの用語一覧
トランザクション処理:  ロールバック  ロールフォワード  正常終了  ストアドプロシージャ  2フェーズコミット  TPC  TPC-C

ストアドプロシージャ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/19 20:02 UTC 版)

ナビゲーションに移動 検索に移動

ストアドプロシージャ (英:Stored Procedure) は、リレーショナルデータベース管理システム(RDBMS)にアクセスするアプリケーションで利用できるサブルーチンである。このようなプロシージャは、データベースのデータ辞書に格納されている。

ストアドプロシージャの用途としては、データの検証(データベースへの統合)やアクセス制御の仕組みなどがある。さらに、ストアドプロシージャは、もともとアプリケーションに実装されていたロジックを統合し、一元化することができる。時間とメモリを節約するために、複数のSQL文の実行を必要とする大規模または複雑な処理をストアドプロシージャに保存し、すべてのアプリケーションはそのプロシージャを呼び出すことができる。ストアドプロシージャの中から別のストアドプロシージャを実行することで、ネストされたストアドプロシージャを使用することができる。

ストアドプロシージャは結果セット、つまりSELECT文の結果を返すことがある。このような結果セットは、カーソル、他のストアドプロシージャ、結果セットロケータの関連付け、またはアプリケーションによって処理することができる。ストアドプロシージャは、データを処理するための宣言された変数や、テーブルの複数の行をループするためのカーソルを含むこともできる。ストアドプロシージャのフロー制御文には、通常、IFWHILELOOPREPEATCASE文などがある。ストアドプロシージャは、変数の宣言方法と宣言場所によって、変数を受け取って結果を返したり、変数を変更して結果を返したりすることができる。

実装

ストアドプロシージャは、ユーザー定義関数(UDF)に似ている。大きな違いは、UDFはSQL文の中で他の式と同様に使用できるのに対し、ストアドプロシージャはCALL文を使って呼び出さなければならないことである。

CALL procedure(...)

または

EXECUTE procedure(...)

ストアドプロシージャの正確で正しい実装は、データベースシステムによって異なる。ほとんどの主要なデータベースベンダーは、何らかの形でストアドプロシージャをサポートしている。ストアドプロシージャは、データベースシステムに応じて、SQLJavaCC++など、さまざまなプログラミング言語で実装することができる。SQL以外の言語で書かれたストアドプロシージャは、それ自体がSQL文を実行することも、しないこともある。

ストアドプロシージャの採用が進んだことで、SQL:1999とSQL:2003の標準SQL/PSMという部分で、SQL言語に手続き的な要素が導入されることになり、SQLは命令型プログラミング言語となった。ほとんどのデータベースシステムは,SQL/PSMを超える独自の拡張やベンダ固有の拡張を提供している.Javaストアドプロシージャの標準仕様は、SQL/JRTと同様に存在する。

データベースシステム 実装言語
CUBRID Java
IBM DB2 SQL PL( SQL/PSM標準に近い)またはJava
Firebird PSQL(FyracleはOracleのPL / SQLの一部もサポート)
Informix Java
Interbase ストアドプロシージャとトリガー言語
Microsoft SQL Server Transact-SQLおよびさまざまな.NET Framework言語
MySQLMariaDB SQL/PSM標準に厳密に準拠した独自のストアドプロシージャ
NuoDB SQLまたはJava
OpenLink Virtuoso Virtuoso SQLプロシージャ(VSP); [1] Java、C、およびその他のプログラミング言語を介して拡張可能
Oracle PL / SQLまたはJava
PostgreSQL PL/pgSQLは、PL / PerlやPL / PHPなどの独自の関数言語を使用することも可能
SAP HANA SQLScriptまたはR
SAP ASE Transact-SQL
SAP SQL Anywhere Transact-SQL 、Watcom SQL
SQLite サポートされていない

静的SQLとの比較

オーバーヘッド

ストアドプロシージャ文は直接データベースに格納されるため、ソフトウェアアプリケーションがインライン(動的)SQLクエリをデータベースに送信する状況で通常必要となるコンパイルのオーバーヘッドのすべてまたは一部を削除することができる。(ただし、ほとんどのデータベースシステムは、動的SQL文の反復的なコンパイルを避けるために、ステートメントキャッシュや他の方法を実装している)。また、プリコンパイルされたSQLをある程度回避できる一方で、SQL文のすべての引数がコンパイル時に提供されないため、最適な実行プランを作成するための複雑さが増す。特定のデータベースの実装や構成によっては、ストアドプロシージャと一般的なクエリやユーザー定義関数を比較した場合、性能に差が出ることがある。

ネットワークトラフィックの回避

ストアドプロシージャの大きな利点は、データベースエンジン内で直接実行できることである。本番システムでは、プロシージャは専用のデータベースサーバーで実行され、アクセスされるデータに直接アクセスできるのが一般的である。この利点は、ネットワーク通信コストを完全に回避できることである。これは、一連の複雑なSQL文の場合に、より重要になる。

ビジネスロジックのカプセル化

ストアドプロシージャは、プログラマがビジネスロジックをAPIとしてデータベースに埋め込むことができるため、データ管理を簡素化し、クライアントプログラムの別の場所でロジックをエンコードする必要性を低減することができる。その結果、欠陥のあるクライアントプログラムによるデータ破損の可能性を低くすることができる。データベースシステムは、ストアドプロシージャの助けを借りて、データの整合性と一貫性を確保することができる。

アクセス権の委譲

多くのシステムでは、ストアドプロシージャに、そのプロシージャを実行するユーザーが直接持っていないデータベースへのアクセス権を与えることができる。

SQLインジェクション攻撃からの保護

ストアドプロシージャは、インジェクション攻撃から保護するために使用することができる。ストアドプロシージャのパラメータは、攻撃者がSQLコマンドを挿入しても、データとして扱われる。また、DBMSによっては、パラメータの型をチェックするものもある。しかし、ストアドプロシージャが入力されたデータを使って動的SQLを生成する場合、適切な予防措置が取られない限り、SQLインジェクションの危険性があることに変わりはない。

デメリット

  • ストアドプロシージャ言語は、ベンダーに依存することが多い。データベースベンダーを変更する場合、通常、既存のストアドプロシージャを書き換える必要がある。
  • ストアドプロシージャの変更は、他のコードに比べてバージョン管理システム内で追跡することが困難である。プロジェクト履歴に保存するためには、変更をスクリプトとして再現しなければならず、プロシージャの差分をマージして正しく追跡するのが難しい場合がある。
  • ストアドプロシージャのエラーは、アプリケーションIDEでのコンパイルやビルドのステップの一部として捕らえることができない。ストアドプロシージャが行方不明になったり、誤って削除されたりした場合も同様である。
  • ストアドプロシージャ言語は、ベンダーによって洗練されたレベルが異なる。
    • 例えば、PostgresのpgpsqlはMicrosoftのT-SQLよりも多くの言語機能(特に拡張機能による)を持っている。
  • ストアドプロシージャの作成とデバッグのためのツールサポートは、他のプログラミング言語ほど充実していないことが多いが、これはベンダーや言語によって異なる。
    • 例えば、PL/SQLとT-SQLには専用の IDE とデバッガがある。PL/PgSQLは、様々なIDEからデバッグすることができる。

脚注

[脚注の使い方]
  1. ^ Chapter 11. SQL Procedure Language Guide”. OpenLink documentation. 2019年9月11日閲覧。

関連項目



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ストアドプロシージャ」の関連用語

ストアドプロシージャのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ストアドプロシージャのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2025 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリの【ストアドプロシージャ】の記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのストアドプロシージャ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS