ストアド プロシージャ(データベースで実行されるデータベース オブジェクト)は、データベースへのインターフェースを提供する、SQL文と制御文と条件処理文の組み合わせです。
ストアド プロシージャという用語は、SQL文を使って記述したストアド プロシージャを指します。外部ストアド プロシージャという用語は、C、C++またはJavaで記述したストアド プロシージャを指します。
通常、ストアド プロシージャは以下のものから成り立っています。
- プロシージャ名
- 入力パラメータと出力パラメータ
- プロシージャ本体
ストアド プロシージャごとに、データベース内にストアド プロシージャ テーブルがあります。このテーブルには、ユーザーが記述したストアド プロシージャ本体とそれに対応するコンパイル済みのストアド プロシージャ オブジェクト コードが含まれます。データ ディクショナリ テーブルには、ストアド プロシージャのパラメータと属性が含まれます。
プロシージャ本体とソース テキスト
以下の用語は、ストアド プロシージャの構造を理解するのに役立ちます。
用語 | 定義 |
---|---|
プロシージャ本体 | ストアド プロシージャのメイン タスクを構成する文の集合。 プロシージャ本体は、単一の制御文やSQL文、またはBEGIN END複合文(ブロックとも呼ばれる)にできます。複合文は入れ子になることもあります。 |
ソース テキスト | CREATE/REPLACE PROCEDUREステートメント、パラメータ、プロシージャ名、およびストアド プロシージャ本体を含む、ストアド プロシージャの定義全体。 |
プロシージャ本体要素
プロシージャ本体には、次のような構成要素が含まれています。
ストアド プロシージャ本体のタイプ | 含むことができるもの |
---|---|
単一文 | 単一のSQL文または制御文(動的SQLを含む)。 次の構成要素を含まれません。
|
複合文 |
|
プロシージャ本体に含まれる文が1文のみで、宣言を一切含まない場合は、複合文をBEGIN ENDキーワードで囲む必要はありません。
ストアド プロシージャの利点
ストアド プロシージャには、複数の入力および出力パラメータとローカル変数に加えて制御文および条件処理文が含まれており、これらによってSQLは完全な計算用プログラミング言語となります。
ストアド プロシージャをベースとするアプリケーションは、同等の埋め込みSQLアプリケーションと比べて以下の利点があります。
- クライアント/サーバー間のネットワーク トラフィックが非常に少ないため、パフォーマンスが優れています。
- サーバー上でビジネス ルールをカプセル化および実施できるので、アプリケーションの保守が向上します。
- トランザクションの制御が向上します。
- ユーザーにデータ テーブルへの直接アクセスを求めるのではなく、プロシージャへのユーザー アクセスに制限することで、アプリケーションのセキュリティが向上します。
- ストアド プロシージャに埋め込まれているすべてのSQL言語文を、1つのCALL文を通してサーバー上で実行できるので、アプリケーションの実行が向上します。
CALL文を入れ子にすると、入れ子にされたプロシージャ内のすべてのトランザクションと複雑なクエリーが、結合されて1つの明示的なトランザクションになり、入れ子にされたプロシージャ内のエラーが内部的に処理されるため、パフォーマンスが向上します。
関連情報
- ストアド プロシージャの詳細は、SQLストアド プロシージャを参照してください。
- ストアド プロシージャ制御文については、SQL制御文を参照してください。
- 外部ストアド プロシージャについては、<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184>および<Teradata Vantage™ - SQL外部ルーチン プログラミング、B035-1147>を参照してください。
- ストアド プロシージャ作成用の構文については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。