CREATE PROCEDURE 文(概要)
CREATE PROCEDURE ステートメントは、ストアード・プロシージャーをデータベース・サーバーに登録します。 このステートメントを使用して、以下のタイプのプロシージャーを登録できます。以下に、それぞれのタイプについて説明します。
- ネイティブ SQL プロシージャー
- プロシージャーは、本体全体が SQL ステートメントで記述されています。この本体は、SQL プロシージャー型言語 (SQL PL) で作成されています。 プロシージャー本体は、プロシージャーのさまざまな属性とともに、プロシージャーの定義に含まれ、指定されます。 ネイティブ SQL プロシージャー用のパッケージが生成されます。 制御文を含む手続き本体が含まれています。 また、 Db2 によって生成されたステートメントが含まれる場合もあります。 このプロシージャーが呼び出されるたびに、パッケージは 1 回以上実行されます。
CREATE PROCEDURE ステートメントに FENCED オプションまたは EXTERNAL オプションを指定しないで作成される SQL プロシージャーはすべて、ネイティブ SQL プロシージャーです。 ネイティブ SQL プロシージャーでは、より多くの機能がサポートされていますが、通常は外部 SQL プロシージャーよりもパフォーマンスに優れており、関連付けられた C プログラムは生成されません。
CREATE PROCEDURE 文(SQL - ネイティブプロシージャ )を参照してください。
- 外部ストアード・プロシージャー
- プロシージャー本体は、C、C++ 、COBOL、または Java などのプログラミング言語で作成され、SQL ステートメントを含むことができる外部プログラムです。 外部ストアード・プロシージャーのソース・コードは、ストアード・プロシージャーの定義から切り離され、パッケージにバインドされます。 外部実行可能ファイルの名前は、プロシージャー定義の一部として、プロシージャーの各種属性とともに指定されます。 すべてのプログラムは、言語環境プログラムを使用して実行されるように設計する必要があります。 COBOL および C++ のストアード・プロシージャーには、
オブジェクト指向拡張機能を含めることができます。 ストアドプロシージャが呼び出されるたびに、プロシージャ内のロジックが、パッケージが実行されるかどうか、また何回実行されるかを制御します。
詳細は、「外部ストアドプロシージャの作成」 を参照してください。
CREATE PROCEDURE 文(外部プロシージャ )を参照してください。
- 外部 SQL プロシージャー (非推奨)
- プロシージャーは、本体全体が SQL ステートメントで記述されています。この本体は、SQL プロシージャー型言語 (SQL PL) で作成されています。 プロシージャーの本体は、プロシージャーの各種属性とともにプロシージャー定義に指定されます。 C プログラムと関連パッケージが外部 SQL プロシージャー用に生成されます。 制御文を含む手続き本体が含まれています。 また、 Db2 によって生成されたステートメントが含まれる場合もあります。この手順が呼び出されるたびに、パッケージは1回または複数回実行されます。
ネイティブ SQL プロシージャーは、より完全にサポートされており、保守が容易であり、通常は非推奨の外部 SQL プロシージャーよりも効率よく実行されます。
CREATE PROCEDURE 文(SQL - 外部プロシージャ)(非推奨 )を参照してください。
ALL プロシージャー・タイプの注
- 所有者特権
- 所有者は、プロシージャー (EXECUTE 特権) を呼び出し、また、他のユーザーにそのプロシージャーの呼び出す特権を付与することが許可されます。 GRANT文(関数またはプロシージャの権限 )を参照してください。 オブジェクトの所有権に関する詳細は、「権限、特権、許可、マスク、およびオブジェクトの所有権 」を参照してください。
- パラメーターの定義
- このプロシージャの入力パラメータは、括弧内のリストとして指定されます。
プロシージャーには入力パラメーターがない場合があります。 この場合、空の括弧のセットを指定または省略できます。例えば、次のようになります。
CREATE PROCEDURE ASSEMBLY_PARTS()または
CREATE PROCEDURE ASSEMBLY_PARTS- パラメーターのデータ・タイプの選択:
ストアード・プロシージャーのパラメーターのデータ・タイプを選択するときには、パラメーターの値に影響を与える可能性があるプロモーションのルールを考慮してください。 (データタイプのプロモーションを参照)。 例えば、ストアード・プロシージャー に対する入力引数の 1 つである定数の組み込みデータ・タイプが、プロシージャー の予期するデータ・タイプとは異なっていたり、さらに重大な場合は、 その予期されるデータ・タイプにプロモートできない場合があります。 プロモーションの規則に基づいて、 パラメーターには以下のデータ・タイプを使用することをお勧めします。
- SMALLINT の代わりに INTEGER
- REAL の代わりに DOUBLE
- CHAR の代わりに VARCHAR
- GRAPHIC の代わりに VARGRAPHIC
- BINARY の代わりに VARBINARY
Db2 for z/OS®以外のプラットフォーム間での機能の移植性のために、以下のデータ・タイプを使用しないでください。これらのデータ・タイプには、プラットフォームごとに異なる表現を持つ可能性があります。
- Float。 代わりに DOUBLE または REAL を使用してください。
- 数値。 代わりに DECIMAL を使用してください。
- パラメーターのコード化スキームの指定
- 文字またはグラフィック・ストリング・データ・タイプを持つすべてのパラメーター (入力パラメーターと出力パラメーターの両方) のコード化スキームは、同じでなければなりません。(全てのASCII、全てのEBCDICまたは全てのUNICOD) PARAMETER CCSID を使用してすべてのパラメーターに対してコード化スキームを一度に指定したり、コード化スキームをデフォルトのシステム値のままにしたりするのでなく、 個々のパラメーターにコード化スキームを指定する場合は、これらすべてが一致していることを確認してください。
- パラメーターに対する AS LOCATOR の指定
- 値の代わりにロケーターを渡すと、プロシージャーに出入りするバイトが少なくなる可能性があります。 これは、パラメーターの値が非常に大きい場合に役立ちます。 AS LOCATOR 句は、実際の値の代わりに、パラメーターの値へのロケーターが渡されることを指定します。 AS LOCATOR は、LOB データ・タイプ、または LOB データ・タイプに基づく特殊タイプのパラメーターの場合にのみ指定できます。
AS LOCATOR を SQL プロシージャーに指定することはできません。
- ネストしたストアード・プロシージャーの結果セットへのアクセス
- ストアード・プロシージャー、ユーザー定義関数、またはトリガーは、COMMIT ON RETURN 節で定義されているストアード・プロシージャーを呼び出すことができません。
- プロシージャー内の特殊レジスター
- 呼び出し元の特殊レジスターの設定は、呼び出されたときにプロシージャーに継承され、呼び出し元に戻ったときに復元されます。 プロシージャー内で特殊レジスターを変更できますが、これらの変更は呼び出し元には影響しません。
- プロシージャ内のグローバル変数
- ルーチンで参照されるグローバル変数の内容は、呼び出し元から継承されます。 ストアード・プロシージャーがトリガーまたは関数によって呼び出される場合を除き、グローバル変数はストアード・プロシージャー内で変更できます。
プロシージャーにグローバル変数への参照が含まれている場合、SQL データ・アクセスのレベルは、少なくとも CONTAINS SQL でなければなりません。 プロシージャーにグローバル変数を変更する SQL ステートメントが含まれている場合、SQL データ・アクセスのレベルは MODIFIES SQL DATA でなければなりません。