CREATE PROCEDURE 文(SQL - ネイティブプロシージャ)
CREATE PROCEDURE 文は、現在のサーバーにおける SQL プロシージャまたはプロシージャのバージョンを定義し、そのプロシージャのソースステートメントを指定します。
FL 507- VERSION 文節が指定されていない場合は、プロシージャー定義が置き換えられます。
- VERSION 文節が指定されていて、識別されたバージョンが存在している場合には、バージョンが置き換えられます。 そうでない場合、バージョンはプロシージャー定義に追加されます。
ネイティブ SQL プロシージャーは SQL 制御ステートメントを含むことができます。 ネイティブSQLプロシージャでサポートされているSQL制御文については、 SQLプロシージャ言語(SQL PL) を参照してください。

CREATE PROCEDUREの呼び出し(SQL - ネイティブ)
このステートメントは動的に準備することのみが可能で、DYNAMICRULES 実行動作を暗黙的または明示的に指定する必要があります。

CREATE PROCEDUREの権限(SQL - ネイティブ)
- スキーマに対する CREATEIN 特権
- システム DBADM 権限
- SYSCTRL 権限
- SYSADM 権限
- インストール SYSOPR 権限 (プロセスの現行 SQLID が SYSINSTL に設定されている場合)
スキーマ名と一致する許可 ID には、暗黙的にそのスキーマの CREATEIN 特権があります。
- プロシージャーの所有権
- スキーマに対する DROPIN 特権と CREATEIN 特権の両方
- システム DBADM 権限
- SYSCTRL 権限
- SYSADM 権限
- インストール SYSOPR 権限 (プロセスの現行 SQLID が SYSINSTL に設定されている場合)
- プロシージャーの所有権
- スキーマに対する ALTERIN 特権
- システム DBADM 権限
- SYSCTRL 権限
- SYSADM 権限
- インストール SYSOPR 権限 (プロセスの現行 SQLID が SYSINSTL に設定されている場合)
- ユーザー定義タイプの所有権
- ユーザー定義タイプに対する USAGE 特権
- システム DBADM 権限
- DATAACCESS 権限
- SYSADM 権限
- 表の所有権
- 表に対する SELECT 特権
- DATAACCESS 権限
- SYSADM 権限
WLM ENVIRONMENT FOR DEBUG MODE 文節を指定した場合は、RACF または外部セキュリティー製品が呼び出され、WLM 環境でプログラムを定義するために必要な権限がチェックされます。 WLM 環境アクセスが RACF で保護されている場合、特権セットには必要な権限が含まれている必要があります。
プロシージャの作成または置換、プロシージャのバージョンの追加または置換を行うには、権限セットに、インストール・パネル DSNTIPP の BIND NEW PACKAGE フィールドの値に応じて、新しいパッケージまたは既存のパッケージの新しいバージョンを追加するために必要な権限が含まれているか、権限セットに SYSADM、SYSCTRL、またはシステム DBADM 権限が含まれている必要があります。 プロシージャー・パッケージの所有者は、SQL-routine-body でステートメントを実行するために必要な特権を持っている必要があります。
SEPARATE SECURITY サブシステム・パラメーターが NO に設定されている場合、SYSADM 権限には暗黙の SECADM 権限があります。
プロシージャー定義の内容によっては、SYSDUMMYx 表に対する追加の許可が必要になる場合があります。 詳細は、 SYSDUMMYxテーブルを参照してください。
プロシージャーの作成に使用される許可 ID にインストール SYSADM 権限またはインストール SYSOPR 権限があり、現行の SQLID が SYSINSTL に設定されている場合、プロシージャーはシステム定義プロシージャーとして識別されます。
特権セット:
特権セットは、プロセスの SQL 許可 ID が持つ特権となります。ただし、プロセスがトラステッド・コンテキスト内にあり、ROLE AS OBJECT OWNER 文節が指定された場合を除きます。 その場合には、特権セットは、プロセスの 1 次許可 ID と関連するロールが持つ特権となります。
- PACKAGE OWNER オプションが指定されていない場合は、ユーザーに関連付けられているロールがパッケージ所有者になります。
- PACKAGE OWNER オプションが指定されている場合は、PACKAGE OWNER オプションで指定されたロールがパッケージ所有者になります。 トラステッド・コンテキストでは、指定された PACKAGE OWNER はロールでなければなりません。
- PACKAGE OWNER オプションが指定されていない場合、バインダーに関連付けられているロールがパッケージ所有者になります。
- PACKAGE OWNER オプションが指定されている場合は、PACKAGE OWNER オプションで指定されたロールがパッケージ所有者になります。 トラステッド・コンテキストでは、指定された PACKAGE OWNER はロールでなければなりません。
- PACKAGE OWNER オプションが指定されていない場合は、プロシージャー所有者がパッケージ所有者になります。
- PACKAGE OWNER オプションが指定されている場合は、PACKAGE OWNER オプションで指定された authorization-name がパッケージ所有者になります。

CREATE PROCEDURE の構文(SQL - ネイティブ)
parameter-declaration:
parameter-type:
データ・タイプ:
built-in-type:
option-list: (この各オプションを任意の順序で指定できますが、各々を指定できるのは 1 回限りです。)
手続き定義:
SQL-routine-body:
CREATE PROCEDURE (SQL - ネイティブ) の説明
OR REPLACE
プロシージャーが現行サーバーに存在する場合、既存の定義が置換されるか、またはプロシージャーのバージョンが追加または置換されることを指定します。 このオプションは、プロシージャーの定義が現行のサーバー上に存在しない場合は無視されます。 指定された名前を持つプロシージャーが存在する場合、既存のプロシージャーはネイティブ SQL プロシージャーでなければなりません。
プロシージャーがまだ存在せず、VERSION キーワードが指定されていない場合には、プロシージャーは初期バージョンのプロシージャー (V1) で作成されます。
プロシージャーが存在し、VERSION キーワードが指定されていない場合には、プロシージャーは置き換えられます。 既存の定義は、新規定義がカタログ内で置換される前にドロップされます。ただし、プロシージャーで付与された特権は影響を受けません。 プロシージャーは次のように再作成されます。- 既存のコメントは破棄されます
- プロシージャーの定義を変更できます
- プロシージャー定義に関連付けられているタイム・スタンプが更新されます。
- プロシージャーの所有者は変更できます。
- システム・デフォルト値は、置き換え対象のプロシージャーが最初に定義されたときに、それらのオプションが明示的に指定されていた場合でも、明示的に指定されていないオプションに使用されます。
既存のプロシージャーを置き換えるには、プロシージャーを複数のバージョンを使用したり、バージョン ID が V1 以外の単一バージョンで定義したりしてはなりません。 さらに、以下のいずれかの条件を満たす必要があります。- プロシージャー名を使用して SPECIFIC 文節を指定する必要があります。
- 新規定義のシグニチャーは、パラメーター名を除き、既存のプロシージャー定義のシグニチャーと一致する必要があります。
プロシージャーが指定されたバージョンのプロシージャーで存在し、VERSION キーワードが指定されている場合、ALTER PROCEDURE ステートメントが REPLACE VERSION 文節を指定して発行された場合と同じように、バージョンはカタログ内で置き換えられます。 プロシージャー所有者は変更されません。 置き換えられるバージョンのプロシージャーをバインドすると、たとえ、そのルーチン本体を変更していなくとも、新規アクセス・パスが作成される結果となる可能性があります。
プロシージャーのバージョンを置換する場合、パラメーターのデータ・タイプ、CCSID 仕様、および文字データ属性 (FOR BIT/SBCS/MIXED DATA) は、現在アクティブなバージョンのプロシージャーに対応するパラメーターの属性と同じでなければなりません。 パラメーター・リストにテーブル・パラメーターを含める必要はありません。 明示的に指定されていないオプションの場合、置換されるプロシージャーのバージョンが最初に定義されたときに、それらのオプションが明示的に指定されていた場合でも、それらのオプションのシステム・デフォルト値が使用されます。 このことは、DISABLE DEBUG MODE を指定したプロシージャー・バージョンに対しては当てはまりません。 プロシージャーのバージョンに対して DISABLE DEBUG MODE が指定されている場合は、OR REPLACE 文節を指定した CREATE ステートメントを使用して、このオプションを変更することはできません。
プロシージャーは存在するが、バージョン routine-version-id が存在せず、VERSION キーワードが指定されている場合は、指定されたバージョンが作成されます。 routine-version-id は、新しいバージョンのプロシージャーのバージョン ID です。 新規バージョンは、ALTER PROCEDURE ステートメントが ADD VERSION 文節を指定して発行されているかのように定義されます。 プロシージャー所有者は変更されません。 プロシージャー定義が置換されると、そのプロシージャーの定義に関するカタログ内の既存のコメントはすべて除去されます。
プロシージャーの新規バージョンを追加する場合、パラメーターのデータ・タイプ、CCSID 仕様、および文字データ属性 (FOR BIT/SBCS/MIXED DATA) は、現在アクティブなバージョンのプロシージャーに対応するパラメーターの属性と同じでなければなりません。 パラメーター・リストにテーブル・パラメーターを含める必要はありません。 このパラメーター名は、プロシージャーの他バージョンとは異なっていても構いません。 明示的に指定されていないオプションの場合、システム・デフォルト値が使用されます。

- プロシージャー名

FL 507 手続きの名称。 暗黙的または明示的なスキーマ名を含む名前は、現行サーバーに存在するプロシージャーを識別してはなりません。 ただし、OR REPLACE キーワードも指定されている場合は、既存のプロシージャー名を指定することができます。
CREATE ステートメントがそのプロシージャーのバージョンを追加または置換する場合、この名前は既存のラップ・プロシージャーを識別してはなりません。

SYSADM'、'SYSIBM'、'SYSIBMADM'、'SYSPROC'、'SYSTOOLS'のいずれかでない限り、スキーマ名を'SYS'で始めることはできない。
スキーマに'SYSIBMADM'または'SYSTOOLS'を使用するには、SYSADMまたはSYSCTRL権限が必要です。


- (パラメータ宣言、…)
- プロシージャーのパラメーター数、各パラメーターのデータ・タイプと使用方法、および各パラメーターの名前 (定義対象のプロシージャー・バージョンに対するパラメーターの名前) を指定します。 パラメーター数および各パラメーターの指定されたデータ・タイプと使用方法は、このプロシージャーの他のすべてのバージョンについて、パラメーターの対応する位置にあるデータ・タイプと一致する必要があります。 データ・タイプのシノニムは一致と見なされます。 すべてのパラメーターが null 可能です。
IN、OUT、および INOUT はパラメーターの使用方法を指定します。 パラメーターの使用方法は、同じプロシージャーの他のバージョンにおけるパラメーターの暗黙的な使用方法または明示的な使用方法と一致する必要があります。
- IN
- パラメーターをプロシージャーの入力パラメーターとして指定します。 プロシージャー内でパラメーターが変更されても、
そのプロシージャーの入り口で指定されるパラメーター値が、呼び出し側の SQL アプリケーションに戻される値となります。
デフォルトは IN です。
- OUT
- パラメーターをプロシージャーによって戻される出力パラメーター として識別します。 プロシージャー内でパラメーターが設定されなければ、NULL 値が戻されます。
- INOUT
- パラメーターを、プロシージャーの入力および出力パラメーターの両方として指定します。 プロシージャー内でパラメーターが設定されなければ、入力値が戻されます。
- パラメーター名
- SQL 変数として使用するパラメーターの名前を指定します。 パラメーター名は、このバージョンのプロシージャーにある他のどのパラメーターの名前とも同じにすることはできません。 このバージョンのプロシージャー内にあるパラメーター名は、このプロシージャーの他のバージョンにおいて対応するパラメーターの名前と異なっても構いません。
- 一体型
- パラメーターのデータ・タイプは組み込みデータ・タイプです。
データ型の詳細については、文字データ型のサブタイプ (FORサブタイプDATA句 )を含め、 CREATE TABLE文の 「組み込み型」 を参照してください。 ただし、長さが変わるストリング・データ・タイプは、CREATE TABLE ステートメントに対するものとは異なる最大長を持ちます。 パラメーター (および SQL 変数) に対する最大長は次のとおりです。すなわち、VARCHAR または VARBINARY の場合は 32704、VARGRAPHIC の場合は 16352 です。
文字データ・タイプまたはグラフィック・データ・タイプのパラメーターの場合は、PARAMETER CCSID 文節または CCSID 文節によってパラメーターのコード化スキームを指定します。 これらの文節をいずれも指定しない場合、コード化スキームはインストール・パネル DSNTIPF の DEF ENCODING SCHEME フィールドの値です。
文字データ・タイプの入力パラメーターにはサブタイプ (BIT、SBCS、または MIXED) が 暗黙的または明示的に指定されていますが、入力パラメーターに入れて実際に渡される 値は、任意のサブタイプを持つ場合があります。 したがって、プロシージャーが呼び出されると、入力データからパラメーターのサブタイプへの変換が起こる場合があります。 ASCII また は EBCDIC では、実際に DBCS 文字を含む混合データを SBCS サブタイプで宣言されている入力パラメーターの値に使用すると、エラーが起こります。
日時データ・タイプまたは特殊タイプのパラメーターは、異なるデータ・タイプとして 関数に渡されます。- 日時タイプ・パラメーターは文字データ・タイプとして渡され、データは ISO 形式 で渡されます。 日時タイプ・パラメーターのコード化スキームは、任意の文字ストリングまたはグラフィック・ストリング・パラメーターの暗黙的または明示的に指定されたコード化スキームと同じです。 文字またはグラフィック・ストリング・パラメーターが渡されない場合、コード化スキームは、 インストール・パネル DSNTIPF の DEF ENCODING SCHEME フィールドの値になります。
- 特殊タイプのパラメーターは、特殊タイプのソース・タイプとして受け渡されます。
- ロケーターとして
- パラメーターの実際の値の代わりに、値に対するロケーターがプロシージャーに渡されることを指定します。 AS LOCATOR は、LOB データ・タイプ、または LOB データ・タイプに基づく特殊タイプのパラメーターにのみ指定します。 値の代わりにロケーターを渡すと、特にパラメーターの値が非常に大きい場合に、プロシージャーに渡すバイト数を減らすことができます。
AS LOCATOR 文節は、データ・タイプのプロモートが可能かどうかの判別には影響ありません。
- 型名明確
- 入力パラメーターのデータ・タイプは特殊タイプです。 パラメーターの長さ、 精度、位取り、サブタイプ、またはコード化スキームの各属性は、いずれも特殊タイプのソース・タイプの属性です。 特殊タイプは、LOB データ・タイプに基づくものであってはなりません。
- 配列タイプ名
- 入力パラメーターのデータ・タイプはユーザー定義配列タイプです。
スキーマ名を指定せずに array-type-name を指定すると、Db2は SQL パス内のスキーマを検索することによって配列タイプを解決します。
- テーブル名と同じテーブルのLOCATOR
- パラメーターが遷移表であることを指定します。 ただし、プロシージャーの
呼び出し時に、遷移表の実際の値はそのプロシージャーに渡されません。 代わり
に 1 つの値が渡されます。 この 1 つの値は表のロケーターで、プロシージャー
はこれを使用して遷移表の列にアクセスします。 指定された表には XML 列を含めることができますが、プロシージャーがこれらの XML 列を参照することはできません。 表パラメーターを使用する
プロシージャーは、トリガーのトリガー・アクションのみから呼び出すことができます。
CREATE ステートメントが既存のプロシージャーのバージョンを追加または置換するときには、TABLE LIKE 文節を指定してはなりません。
- VERSION ルーチンバージョンID
- 定義されるプロシージャーのバージョンのバージョン ID を指定します。 routine-version-id の指定については、 SQL の命名規則を参照してください。 ADD VERSION 文節指定の ALTER PROCEDURE ステートメント、または BIND DEPLOY コマンドを使用して、プロシージャーの追加バージョンを作成できます。
V1 がデフォルトのバージョン ID です。
重要: Db2 で提供されている手順の追加バージョンを作成する際には、VERSIONキーワードを指定しないでください。 Db2 で提供されているバージョンだけがサポートされています。 このようなルーチンの追加のバージョンを作成すると、提供されているルーチンのインストールと構成は失敗します。 - LANGUAGE SQL
- プロシージャーがDb2 SQL プロシージャー型言語で作成されることを指定します。
特定の手続き名
プロシージャーの特定の名前としてプロシージャー名を指定します。 この名前は、プロシージャー名と同じでなければなりません。
スキーマ名を指定しない場合、スキーマ名は、プロシージャー名 (procedure-name) の明示的または暗黙的なスキーマ名と同じになります。 スキーマ名を指定する場合は、プロシージャー名の明示的または暗黙的なスキーマ名と同じ名前でなければなりません。
SPECIFIC 文節を指定しない場合は、特定の名前がプロシージャーの名前になります。 特定名は SYSROUTINES カタログ表の SPECIFIC 列に保管されます。
以下の状況で既存のプロシージャーを置換する場合は、SPECIFIC 文節を指定します。- 既存プロシージャーのパラメーター・リストには、テーブル・パラメーターが含まれています。
- CREATE ステートメントは、パラメーター名以外のパラメーター・リストへの変更を指定します。

- DETERMINISTIC または NOT DETERMINISTIC
- プロシージャーが同じ IN 引数と INOUT 引数を指定して呼び出されるたびに、このプロシージャーが同じ結果を戻すかどうかを指定します。
- DETERMINISTIC
- データベース内で参照されるデータが変更されていなければ、プロシージャーが同じ IN 引数と INOUT 引数を指定して呼び出されるたびに、このプロシージャーは常に同じ結果を戻します。
- NOT DETERMINISTIC
- データベースで参照されるデータが変更されていない場合であっても、プロシージャーが同じ IN 引数と INOUT 引数を指定して呼び出されるたびに、このプロシージャーが同じ結果を戻さない可能性があります。
NOT DETERMINISTIC がデフォルトです。
Db2は、プロシージャー・コードが DETERMINISTIC または NOT DETERMINISTIC の指定と一致していることを検査しません。
- MODIFIES SQL DATA、READS SQL DATA、または CONTAINS SQL
- このルーチンが実行または呼び出すことができる SQL ステートメントおよびネストされたルーチンの分類を指定します。 データベース・マネージャーは、プロシージャーによって発行される SQL ステートメント、およびルーチンによってローカル側で呼び出されるすべてのルーチンが、この指定と一致していることを検証します。ネストされたリモート・ルーチンが呼び出される場合、この検証は実行されません。 各ステートメントの分類については、 ルーチンのSQLステートメント・データ・アクセスの分類を参照のこと。
- MODIFIES SQL DATA
- プロシージャーでサポートされないステートメントを除き、任意の SQL ステートメントをプロシージャーが実行できるように指定します。
MODIFIES SQL DATA がデフォルトです。
- READS SQL DATA
- プロシージャーが、データ・アクセス標識 READS SQL DATA または CONTAINS SQL を指定したステートメントを実行できることを指定します。 このプロシージャーは、データを変更する SQL ステートメントを実行できません。
- CONTAINS SQL
- プロシージャーが、データ・アクセス標識 CONTAINS SQL を指定した SQL ステートメントのみを実行できることを指定します。 このプロシージャーは、データの読み取りまたは変更を行うステートメントを実行できません。
- CALLED ON NULL INPUT
- あるパラメーター値が NULL である場合に (もしくは、すべてのパラメーター値が NULL であっても)、プロシージャーが呼び出されることを指定します。
- 動的結果セット整数
- プロシージャーが戻すことができる照会結果セットの最大数を指定します。 デフォルトは DYNAMIC RESULT SETS 0 で、これは結果セットがないことを示します。 値は0~32767の範囲でなければなりません。
- ALLOW DEBUG MODE、 DISALLOW DEBUG MODEまたは DISABLE DEBUG MODE
- このバージョンのルーチンがデバッグ・モードで実行できるかどうかを指定します。 このデフォルトは、CURRENT DEBUG MODE 特殊レジスターの値を使用して決まります。
- ALLOW DEBUG MODE
- このバージョンのルーチンがデバッグ・モードで実行できることを指定します。 このバージョンのルーチンを呼び出してデバッグを行おうとする場合は、WLM 環境が使用可能でなければなりません。
- DISALLOW DEBUG MODE
- このバージョンのルーチンがデバッグ・モードで実行できないことを指定します。
ALTER ステートメントを使用して、この初期バージョンのルーチンに対してこのオプションを ALLOW DEBUG MODE に変更できます。
- DISABLE DEBUG MODE
- このバージョンのルーチンがデバッグ・モードで実行できないことを指定します。
このバージョンのルーチンが DISABLE DEBUG MODE を使用するように作成または変更された後、ALLOW DEBUG MODE または DISALLOW DEBUG MODE を指定するようにこのバージョンのルーチンを変更できません。 このオプションを変更するには、ルーチンをドロップし、必要なオプションを使用してルーチンを再作成してください。 ルーチンのドロップと再作成に代わる方法は、必要なオプションを使用するそのルーチン・バージョンを作成し、そのバージョンをアクティブ・バージョンにすることです。
DISABLE DEBUG MODE が有効な場合は、WLM ENVIRONMENT FOR DEBUG MODE は無視されます。
- PARAMETER CCSID
- 文字またはグラフィック・ストリング・パラメーターのコード化スキームが ASCII、EBCDIC、または UNICODE のいずれであるかを指定します。 デフォルトのコード化スキームは、パラメーター・リストの CCSID 文節で指定されている値、またはインストール・パネル DSNTIPF のフィールド DEF ENCODING SCHEME で指定されている値になります。
この文節を使用すると、文字ストリング・パラメーターまたはグラフィック・ストリング・パラメーターに対してコード化スキームを容易に指定することができます。 この PARAMETER CCSID 文節のほかに個々のパラメーターに対して個別に CCSID 文節が指定されている場合、すべての CCSID 文節で指定されている値が、この文節で指定されている値と同じでなければなりません。
パラメーターのデータ・タイプが、文字またはグラフィック・タイプのストリングとして定義されているユーザー定義特殊タイプである場合、特殊タイプの CCSID は、この文節で指定されている値と同じでなければなりません。
パラメーターのデータ・タイプが文字またはグラフィック・ストリング配列エレメント、あるいは文字ストリング添字で定義されているユーザー定義配列タイプである場合、これらの配列属性の CCSID は、この文節で指定されている値と同じでなければなりません。
この文節は、ルーチンのシステム生成パラメーターに使用される コード化スキームも指定します。
- QUALIFIER スキーマ名
- プロシージャー本体で参照される非修飾オブジェクト名に使用される暗黙的な修飾子を指定します。 このオプションのデフォルト値がどのように決定されるかについては、「無修飾のエイリアス、インデックス、JARファイル、マスク、パーミッション、シーケンス、テーブル、トリガー、およびビュー名」 を参照してください。
- PACKAGE OWNER 認可名
- ルーチンのバージョンに関連したパッケージの所有者を指定します。 デフォルト値はプロセスの SQL 許可 ID です。
- ASUTIME
- ルーチンの 1 回の呼び出しで使用できるプロセッサー時間の合計量を、CPU サービス単位で指定します。 この値は、リソース限定表の ASUTIME 列とは無関係です。
ルーチンのデバッグ時、この時間制限を設定すると、ルーチンがループ状態になった時に役立ちます。 サービス・ユニットについては、 z/OS MVS 『Initialization and Tuning Guide(初期化およびチューニング・ガイド) 』を参照のこと。
- NO LIMIT
- サービス単位に関して制限がないことを指定します。
NO LIMIT がデフォルトです。
- LIMIT 整数
- CPUサービス単位の制限数は、1~2 147 483 647 の範囲の正の整数です。 プロシージャーが、指定された値より多くのサービス単位を使用する場合、Db2はプロシージャーを取り消します。 プロシージャーの並列タスクによって使用される CPU サイクルは、指定された ASUTIME LIMIT には提供されません。
- COMMIT ON RETURN NO、 COMMIT ON RETURN YES、または AUTONOMOUS
- プロシージャーから戻った直後にDb2がトランザクションをコミットするかどうかを示します。
- COMMIT ON RETURN NO
- Db2は、プロシージャーが戻ったときにコミットを発行しません。 デフォルトはNOです。
- COMMIT ON RETURN YES,
- Db2は、以下のステートメントが真である場合にプロシージャーが戻ると、コミットを発行します。
- CALL ステートメントによって戻された SQLCODE が負でない。
- プロシージャーがアボート必須状態でない。
このコミット操作には、呼び出し側のアプリケーション・プロセスとプロシージャーによって実行される作業が含まれます。
プロシージャーが結果セットを戻す場合、この結果セットに関連付けられているカーソルは、コミットの後に使用可能になるように WITH HOLD で定義されていなければなりません。
- AUTONOMOUS
- Db2は、呼び出し側アプリケーションから独立している作業単位内で SQL プロシージャーを実行します。 このオプションが指定されている場合、プロシージャーは、呼び出し側のアプリケーションに戻る前に COMMIT ON RETURN YES オプションの規則に従います。 ただし、呼び出し側アプリケーションの変更をコミットしません。 autonomous が指定されている場合の規則は次のとおりです。
- DYNAMIC RESULT SETS 0 が有効でなければならない。
- ストアード・プロシージャー・パラメーターが以下のタイプとして定義されていてはならない。
- LOB タイプ
- XML データ・タイプ
- LOB または XML 値に基づく特殊データ・タイプ
- LOB タイプである配列エレメントで定義される配列タイプ
自律型プロシージャーが実行中であるときに、グローバル変数に値を割り当ててはなりません。
- 特殊レジスタを継承するまたは DEFAULT SPECIAL REGISTERS
- ルーチンに入ったときに特殊レジスターを設定する方法を指定します。
- WLM ENVIRONMENT FOR DEBUG MODE 名
- ルーチンのデバッグ時にDb2によって使用される WLM (ワークロード・マネージャー) アプリケーション環境を指定します。 WLM 環境の name は SQL ID です。
WLM ENVIRONMENT FOR DEBUG MODE が指定されていない場合、Db2はインストール時に指定されたデフォルトの WLM が確立したストアード・プロシージャー・アドレス・スペースを使用します。
WLM アプリケーション環境に対して適切な権限を持っている必要があります。
DISABLE DEBUG MODE が有効な場合は、WLM ENVIRONMENT FOR DEBUG MODE 値は無視されます。
- DEFER PREPARE または NODEFER PREPARE
- リモート・オブジェクトを参照する動的 SQL ステートメントの準備を保留するか、即時に準備するかを指定します。
このデフォルトは、REOPT オプションに対して有効な状態にある値により変わります。 REOPT NONE が有効な状態にある場合、デフォルトは、実行時にプランから継承されます。 それ以外の場合、DEFER PREPARE がデフォルトです。
- DEFER PREPARE
- リモート・オブジェクトを参照する動的 SQL ステートメントの準備を保留することを指定します。
分散処理に関する考慮事項については、 DEFERおよびNODEFERバインドオプションを参照してください。
- NODEFER PREPARE
- リモート・オブジェクトを参照する動的 SQL ステートメントの準備を保留しないことを指定します。
- CURRENT DATA YES または現在のデータ番号
- カーソル固定の分離レベルが有効であるときに、読み取り専用カーソルおよび未確定カーソルに対してデータの現行性が必要であるかどうかを指定します。 CURRENT DATA は、分散の未確定カーソルに対してブロック・
フェッチが使用できるかどうかも判別します。
- CURRENT DATA YES
- 読み取り専用カーソルおよび未確定カーソルに対してデータの現行性が必要であることを指定します。 Db2 データの一貫性を確保するために、ページまたは行ロックを取得した。 ブロック・フェッチは、分散の未確定カーソルに対して無視されます。
- 現在のデータなし
- 読み取り専用カーソルおよび未確定カーソルに対してデータの現行性が必要でないことを指定します。 ブロック・フェッチは、分散の未確定カーソルに対して使用できます。 未確定カーソルのオープン後、ルーチンが
その未確定カーソルに対して DELETE WHERE CURRENT OF ステートメントを動的に準備し実行しようとする場合は、CURRENT DATA NO を使用することはお勧めできません。 ご使用のルーチンが以下のいずれかのカーソルに対して DELETE WHERE CURRENT OF ステートメントを使おうとすると、負の SQLCODE を受け取ります。
- ブロック・フェッチを使用しているカーソル
- 照会並列処理を使用しているカーソル
- このアプリケーション・プロセスまたは他のアプリケーション・プロセスで 修正される行に位置付けられたカーソル
CURRENT DATA NO がデフォルトです。
- DEGREE
- パフォーマンスを最大化する並列処理を使用した照会の実行を行うかどうかを指定します。
- 1
- 並列処理を使用しないことを指定します。
1 がデフォルトです。
- ANY
- 並列処理が使用できることを指定します。
- CONCURRENT ACCESS RESOLUTION
- コミット済みのデータのみを処理で使用するかどうか、または更新中であるデータのコミットまたはロールバックを待機するかどうかを指定します。
- WAIT FOR OUTCOME
- 更新中であるデータのコミットまたはロールバックを処理で待機することを指定します。
- USE CURRENTLY COMMITTED
- 更新処理中のデータを検出したときに現在のコミット済みバージョンのデータを処理で使用することを指定します。 USE
CURRENTLY COMMITTED ユニバーサル・テーブル・スペースで定義され、行またはページレベルのロックサイズを持つテーブルにアクセスするスキャンに適用されます。
読み取りトランザクションと挿入トランザクションの間でロックの競合が発生した場合、 USE CURRENTLY COMMITTED 分離レベルがCSまたはRSのスキャンに適用されます。 適用できるスキャンには、読み取り専用および未確定照会および更新可能カーソルのインテント読み取りスキャンが含まれます。 USE CURRENTLY COMMITTED UPDATEまたはDELETE文のWHERE句から開始されたスキャン、およびINSERT文のサブセレクトにも適用されます。
ロック競合が発生するのは、読み取りトランザクションと削除トランザクションの間で、 USE CURRENTLY COMMITTED 分離レベルがCSのスキャンに適用され、CURRENT DATA NOが指定されている場合です。
- DYNAMICRULES
- 実行時に、以下の動的 SQL 属性に対して適用する値を指定します。
- 許可の検査に使用される許可 ID
- 非修飾オブジェクトに使用される修飾子
- Db2が動的 SQL ステートメントを構文解析および意味的に検査するために使用するアプリケーション・プログラミング・オプションのソース
また、DYNAMICRULES は 動的 SQL ステートメントに GRANT、REVOKE、ALTER、CREATE、DROP、および RENAME ステートメントを含めることができるかどうかも指定します。
DYNAMICRULES 文節の値に加えて、ルーチンの実行時環境は、実行時における動的 SQL ステートメントの動きを制御します。 DYNAMICRULES 値と実行時環境の組み合わせにより、動的 SQL 属性の値が決定されます。 その属性値の集合が、動的 SQL ステートメントの振る舞いと呼ばれます。 次の値が指定可能です。- RUN
- 動的 SQL ステートメントが「実行動作」を使用して処理されることを指定します。
RUN がデフォルトです。
- BIND
- 動的 SQL ステートメントが「バインド動作」を使用して処理されることを指定します。
- DEFINEBIND
- 動的 SQL ステートメントが「定義動作」または「バインド動作」のいずれかを使用して処理されることを指定します。
- DEFINERUN
- 動的 SQL ステートメントが「定義動作」または「実行動作」のいずれかを使用して処理されることを指定します。
- INVOKEBIND
- 動的 SQL ステートメントが「呼び出し動作」または「バインド動作」のいずれかを使用して処理されることを指定します。
- INVOKERUN
- 動的 SQL ステートメントが「呼び出し動作」または「実行動作」のいずれかを使用して処理されることを指定します。
- APPLICATION ENCODING SCHEME
- ルーチン本体内の静的 SQL ステートメントにある SQL 変数に対して、デフォルトのコード化スキームを指定します。 この値が使用されるのは、CCSID 文節がデータ・タイプの一部として無指定で、かつ PARAMETER CCSID ルーチン・オプションも無指定の場合に、コンパウンド・ステートメントで SQL 変数を定義するためです。
- ASCII
- サーバーの ASCII CCSID を使用して、データをエンコードすることを指定します。
- EBCDIC
- サーバーの EBCDIC CCSID を使用して、データをエンコードすることを指定します。
- UNICODE
- サーバーの Unicode CCSID を使用して、データをエンコードすることを指定します。
このオプションのデフォルト値がどのように決定されるかについては、「ENCODING バインドオプション」 の「ENCODING バインドオプション」 を参照してください。
- WITH EXPLAIN または説明なし
- ルーチン内の SQL ステートメントの実行方法について、情報が提供されるかどうかを指定します。
- 説明なし
- ルーチン内の SQL ステートメントの実行方法について、情報が提供されないことを指定します。
WITHOUT EXPLAIN を使って指定したルーチンに組み込まれたあるステートメントに対して、EXPLAIN 出力を入手できます。これを行うには、ルーチン本体に SQL ステートメント EXPLAIN を組み込みます。 それ以外の場合には、EXPLAIN オプションの値が、ルーチン本体のすべての EXPLAIN 可能 SQL ステートメント、およびすべての DECLARE CURSOR ステートメントの全選択部分に対して適用されます。
WITHOUT EXPLAIN がデフォルトです。
- WITH EXPLAIN
- ルーチン内の SQL ステートメントの実行方法について、情報が提供されることを指定します。 情報は表 owner.PLAN_TABLE に挿入されます。 owner は、ルーチンの所有者の許可 ID です。 あるいは、ルーチンの所有者の許可 ID が、基本表 PLAN_TABLE を示す owner.PLAN_TABLE という別名を持つことができます。 また、owner はその表に関して適切な SELECT 特権および INSERT 特権を持つ必要があります。 WITH
EXPLAIN は、リモート・オブジェクトにアクセスするステートメントに関する情報を取得しません。 PLAN_TABLE は基本表を持つ必要があり、
同じ表名 (PLAN_TABLE) が付いた複数の別名を持つことができますが、スキーマ修飾子は異なります。
ビューやシノニムであってはならず、CREATE文が処理される前に存在していなければなりません。
owner.PLAN_TABLEへのすべての挿入において、QUERYNOの値は、 Db2 によって割り当てられるステートメント番号である。また、WITH EXPLAIN オプションは、2 つのオプション表 DSN_STATEMNT_TABLE および DSN_FUNCTION_TABLE (もし存在すれば) にデータを追加します。 DSN_STATEMNT_TABLE には SQL ステートメントの処理コストの見積もりが含まれ、DSN_FUNCTION_TABLE には関数解決に関する情報が含まれます。 詳細は、EXPLAINテーブルを参照してください。
EXPLAIN文の詳細については、WITH EXPLAINオプションで入力されるテーブルの説明も含めて、 EXPLAIN文を参照してください。
- WITH IMMEDIATE WRITE または即時書き込みなし
- グループ・バッファー・プールの従属ページ・セットまたは従属パーティションに行われる更新に対して、即時書き込みが実行されるかどうかを指定します。 このオプションは、データ共用環境にのみ適用されます。 IMMEDWRITE サブシステム・パラメーターにはこのオプションの影響はありません。 IMMEDWRITE バインドオプションは、実行時間に影響を与える IMMEDWRITE バインドオプションの暗黙的な階層構造(このルーチンオプションに類似)を示します。
- 即時書き込みなし
- 通常の書き込みアクティビティーを行うように指定します。 グループ・バッファー・プールに従属している更新されたページは、フェーズ 1 コミット時点またはフェーズ 1 コミットの前、あるいは、ロールバックされているトランザクションのアボート終了後に書き込まれます。
WITHOUT IMMEDIATE WRITE がデフォルトです。
- WITH IMMEDIATE WRITE
- グループ・バッファー・プールに従属する更新ページが バッファーの更新完了後すぐに書き込まれることを指定します。 バッファーが、トランザクションのフォワード処理中、もしくはトランザクションのロールバック処理中に更新された場合であっても、更新されたページは即時に書き込まれます。 WITH IMMEDIATE WRITE パフォーマンスに影響を与える可能性があります。
- ISOLATION LEVEL RR、 RS、CS、または UR
- ルーチンを、他の実行中のアプリケーションの影響からどの程度分離するかを指定します。 分離レベルに関する情報は、「ISOLATIONオプションの選択」 を参照してください。
- RR
- 反復可能読み取りを指定します。
- RS
- 読み取り固定を指定します。
- CS
- カーソル固定を指定します。 CS がデフォルトです。
- UR
- 非コミット読み取りを指定します。
- WITH KEEP DYNAMIC または WITHOUT KEEP DYNAMIC
- Db2がコミット・ポイント後に動的 SQL ステートメントを保持するかどうかを指定します。
- WITHOUT KEEP DYNAMIC
- Db2が動的 SQL ステートメントをコミット・ポイント後に保持しないことを指定します。
WITHOUT KEEP DYNAMIC がデフォルトです。
- WITH KEEP DYNAMIC
- Db2がコミット・ポイント後に動的 SQL ステートメントを保持することを指定します。 WITH KEEP DYNAMIC を指定すると、アプリケーションがコミット・ポイント後に SQL ステートメント
を準備する必要はありません。 Db2 以下のいずれかが発生するまで、動的SQLステートメントを保持します
- アプリケーション・プロセスが終了する
- ロールバック操作が発生する
- アプリケーションが、動的 SQL ステートメントと同じステートメント ID をもつ明示的 PREPARE ステートメントを実行する
WITH KEEP DYNAMIC を指定し、動的ステートメント・キャッシュが有効になっている場合、 Db2 サブシステムは、プリペアド・ステートメントのコピーをキャッシュ内に保持します。 動的ステートメント・キャッシュが有効になっていない場合、サブシステムはコミット・ポイント以降のSQLステートメント文字列のみを保持します。 該当のステートメントに対してアプリケーションが OPEN、EXECUTE、または DESCRIBE 操作を実行すると、そのステートメントは暗黙的に準備されます。
WITH KEEP DYNAMIC を指定すると、このオプションが有効になっているプロシージャーまたはパッケージを実行するのに使用される DDF サーバーのスレッドはアクティブのままになります。 アクティブな DDF サーバー・スレッドは、アイドル・スレッド・タイムアウトの対象になります。 詳細は、IDLE THREAD TIMEOUT フィールド(IDTHTOIN サブシステムパラメータ )を参照してください。
WITH KEEP DYNAMIC を指定する場合は、REOPT ALWAYS を指定しないでください。 WITH KEEP DYNAMIC と REOPT ALWAYS は同時に指定できません。 ただし、WITH KEEP DYNAMIC と REOPT ONCE は 同時に指定することができます。
DRDAクライアントアプリケーションでWITH HOLDとして定義されたカーソルを使用している場合は、パフォーマンスを向上させるためにWITH KEEP DYNAMICを使用します。 Db2 サブシステムは、取得する行がなくなった時点で保持されているカーソルを自動的に閉じ、余分なネットワークメッセージを排除します。
- OPTHINT 'hint-id '
- ルーチン本体に含まれている静的 SQL ステートメントに対して、照会の最適化ヒントを使用するかどうかを指定します。
hint-id は、最大128バイトの文字列であり、 Db2 サブシステムが入力として使用する行をPLAN_TABLEで検索する際に使用されます。 デフォルト値は空文字列 ('') で、これは Db2 サブシステムが静的SQL文に対して最適化ヒントを使用しないことを示します。
最適化ヒントを使用するのは、ご使用のシステムで最適化ヒントが使用可能な場合に限ります。 詳細は、「OPTIMIZATION HINTS」フィールド(OPTHINTSサブシステム・パラメータ )を参照してください。
- SQL PATH
Db2 が、プロシージャ本体の静的SQL文で無修飾のユーザー定義型、関数、およびプロシージャ名を解決するために使用するSQLパスを指定します。
このオプションは、プロシージャ本体内の動的SQL文には適用されない。 Db2 は CURRENT PATH 特殊レジスタ値を使用して、動的 SQL 文内の修飾されていないユーザ定義型、関数、プロシージャ名を解決します。
SQL PATHのデフォルト値は 「SYSIBM」、「SYSFUN」、「SYSPROC」、「SYSIBMADM」 であり、QUALIFIERオプションの値は、ステートメントの対象となるプロシージャの修飾子です。
スキーマ 「SYSIBM」、「SYSFUN」、「SYSPROC」、「SYSIBMADM」 は明示的に指定する必要はありません。 これらのスキーマを何も明示的に指定していない場合、始めに SQL パスが暗黙的に想定されます。
Db2は、指定された各 schema-name を取得し末尾ブランクを除去し、その前後に 2 つの区切り文字を追加し、最後の各スキーマ名を除く各スキーマ名の後に 1 つコンマを追加して、長さを計算します。 結果としてのストリングの長さは、CURRENT SCHEMA 特殊レジスターの長さを超えてはなりません。 「SYSIBM」、「SYSFUN」、「SYSPROC」、「SYSIBMADM 」スキーマを指定しない場合、それらはSQLパスの長さに含まれません。 SQL パスの全長が CURRENT PATH 特殊レジスターの長さを超える場合、Db2は CREATE ステートメントのエラーを戻します。
詳しくは、以下の関連トピックを参照してください。
- schema-name
- スキーマを指定します。 Db2 CREATE文が処理される際に、指定されたスキーマが実際に存在することを検証しません。
SQL パスに SYSPUBLIC を指定することはできません。
- スキーマ名リスト
- スキーマ名のコンマ区切りリストを指定します。 同一スキーマ名が、スキーマ名のリストに複数回表示されることはありません。 指定できるスキーマ名の数は、結果の SQL パスの最大長で制限されます。
SQL パスに SYSPUBLIC を指定することはできません。
- SYSTEM PATH
- スキーマ名 「SYSIBM」、「SYSFUN」、「SYSPROC」、「SYSIBMADM」 を指定します。
- SESSION_USER または USER
- SESSION_USER または USER の特殊レジスター値を指定します。この値は、最大 8 バイト (EBCDIC で) の schema-name を表します。 CREATE ステートメントの処理時、この長さは、PATH バインド・オプションに対して指定したスキーマ名のリストの合計長に含まれます。
- RELEASE AT
- プロシージャーが使用するリソースを解放する時点 (各コミット・ポイントまたはプロシージャーが終了するとき) を指定します。
- COMMIT
- リソースが各コミット・ポイントで解放されることを示します。
COMMIT がデフォルトです。
- DEALLOCATE
- リソースがスレッドの終了時点でのみで解放されることを指定します。 DEALLOCATE は動的 SQL ステートメントに影響しません。この SQL ステートメントは、常に、RELEASE AT COMMIT を使用します。ただし、次の例外があります。RELEASE AT DEALLOCATE 文節と WITH KEEP DYNAMIC 文節を使用して、かつ、このサブシステムがインストール・パネル DSNTIP8 のフィールド「CACHE DYNAMIC SQL」に対して「YES」の値を指定してインストールされている場合、RELEASE AT DEALLOCATE オプションが動的 SELECT とデータ変更ステートメントに対して引き受けられます。
動的ステートメントのために獲得されたロックは、以下のいずれかのイベントが発生したユニットで保持されます。
- アプリケーション・プロセスが終了する。
- アプリケーション処理が、同じステートメント ID をもつ PREPARE ステートメントを発行する。 (ロックは次のコミット・ポイントで解除されます)。
- その文は使用されていないため、動的な文キャッシュから削除されます。 (ロックは次のコミット・ポイントで解除されます)。
- ステートメントが従属しているオブジェクトがドロップされるか変更される、もしくはステートメントが必要とする特権が取り消される。 (ロックは次のコミット・ポイントで解除されます)。
RELEASE AT DEALLOCATE はパッケージまたはプランのサイズを増加させる可能性があります。その理由は、追加項目がパッケージまたはプランの中に入ってくるからです。
詳細は、「RELEASEオプションの選択」 を参照してください。
- REOPT
- Db2が、SQL 変数または SQL パラメーター、パラメーター・マーカー、および特殊レジスターの値を使用して、実行時にアクセス・パスを決定するかどうかを指定します。
- NONE
- Db2が、SQL 変数または SQL パラメーター、パラメーター・マーカー、および特殊レジスターの値を使用して、実行時にアクセス・パスを判別しないことを指定します。
デフォルトはNONE です。
- ALWAYS
- Db2は、SQL ステートメントが実行されるたびに、常に実行時にアクセス・パスを決定することを指定します。 WITH KEEP DYNAMIC または NODEFER PREPARE 文節と一緒に REOPT ALWAYS を指定しないでください。
- ONCE
- Db2が、ステートメントが初めてオープンされたときに、動的 SQL ステートメントのアクセス・パスを一度だけ判別することを指定します。 このアクセス・パスが使用されるのは、準備されたステートメントが無効化されるか、または動的ステートメント・キャッシュから削除されて再度準備する必要がある時点までです。
- QUERY ACCELERATION
- 静的 SQL 照会がアクセラレーションのためにバインドされるかどうかを指定します。バインドされる場合は、動作も指定します。
- NONE
- アプリケーション内の静的 SQL 照会がアクセラレーションのためにバインドされないこと、あるいはアプリケーションの実行時にアクセラレートされないことを指定します。
- ENABLE
- コストとヒューリスティックの基準を含むアクセラレーション基準を満たす場合に、静的 SQL 照会がアクセラレーションのためにバインドされることを指定します。 照会はアプリケーションの実行時にアクセラレーターにルーティングされます。 そうでない場合、静的照会がアクセラレーション基準を満たさない場合、照会はDb2で実行のためにバインドされます。
以下の例のいずれかなどのエラー条件が発生した場合、アプリケーションの実行時に加速された静的照会の実行中に発生すると、Db2は静的照会を失敗させ、アプリケーションに負の SQL コードを戻します。
- アクセラレーター上で静的照会を実行したときに障害が発生した。
- アクセラレーターが照会に関するエラーを戻した。
- アクセラレーターが開始されておらず、Db2が静的照会を実行のためにアクセラレーターに経路指定できません。
- ENABLE WITH FAILBACK
- ENABLE と同じ動作になります。ただし、アプリケーションの実行時にアクセラレートされた静的照会の最初の OPEN で、エラー条件のいずれかが発生した場合を除きます。 この場合、静的照会を失敗させ、アプリケーションに負の SQL コードを返す代わりに、Db2は、照会の一時 statement-level 増分バインドを実行し、Db2で照会を実行します。 アプリケーションはアクセラレーションの失敗を認識しません。 アプリケーションがアクセラレータの照会に対して正常に OPEN を実行した後は、Db2へのフェールバックは不可能です。
- ELIGIBLE
- 静的 SQL 照会がコストとヒューリスティックの基準には関係なく基本的なアクセラレーション基準を満たす場合、その照会がアクセラレーションのためにバインドされることを指定します。 照会はアプリケーションの実行時にアクセラレーターにルーティングされます。
ENABLE の動作と同様に、アプリケーションの実行時にアクセラレートされた静的照会の実行中にエラー条件が発生した場合、Db2は静的照会を失敗させ、アプリケーションに対して負の SQL コードを戻します。
- すべて
- アプリケーション内のすべての静的 SQL 照会がアクセラレーションのためにバインドされ、かつ、アプリケーションの実行時にアクセラレーターにルーティングされることを指定します。 Db2がアクセラレーターで実行するために静的照会をバインドできないと判断し、照会がユーザー基本表またはビューを参照すると、BIND または REBIND PACKAGE 操作はその照会に対するエラー・メッセージを出して失敗します。 (宣言済みグローバル一時表 (DGTT) および作成済みグローバル一時表 (CGTT) はアクセラレートできないため、これらの表に対して失敗の例外が生成されます。)
ENABLE の動作と同様に、アプリケーションの実行時にアクセラレートされた静的照会の実行中にエラー条件が発生した場合、Db2は静的照会を失敗させ、アプリケーションに対して負の SQL コードを戻します。
このバインド・オプションは、ルーチンの RETURN ステートメントで指定される fullselect と WITH common-table-expression には適用されず、ルーチンで使用される SET host-variable-assignment にも適用されません。 このような場合に指定される照会は、アクセラレートできません。
- GET_ACCEL_ARCHIVE
- アクセラレーションのためにバインドされる静的 SQL 照会が、アクティブ・データではなく、アクセラレーター上のアーカイブ・データを取得するかどうかを指定します。
- いいえ
- アクセラレーターからアーカイブ・データを取得するために静的 SQL 照会がバインドされないことを指定します。 静的照会がアクセラレーションのためにバインドされていない場合、照会はDb2で実行されるようにバインドされます。
QUERYACCELERATION バインド・オプションが指定されたために、静的照会がアクセラレーションのためにバインドされる場合は、アプリケーションの実行時に照会がアクセラレーターにルーティングされます。ただし、照会はアーカイブ・データを取得しません。
- はい
- 次のすべての基準を満たす場合、照会がアクセラレーションのためにバインドされ、アプリケーションの実行時にアクセラレーターでアーカイブ・データを取得することを指定します。
- QUERYACCELERATION バインド・オプションも指定されている。
- アクセラレーターでパーティション化データがアーカイブされた、アクセラレートされた表を静的 SQL 照会が参照する。
- QUERYACCELERATION バインド・オプションによって指定されるアクセラレーションの基準を、静的照会が満たす。
QUERYACCELERATION バインド・オプションによって指定されるアクセラレーション基準を静的照会が満たさない場合、BIND 操作または REBIND PACKAGE 操作は失敗し、その照会に対するエラー・メッセージが表示されます。
このバインド・オプションは、ルーチンの RETURN ステートメントで指定される fullselect と WITH common-table-expression には適用されず、ルーチンで使用される SET host-variable-assignment にも適用されません。 このような場合に指定される照会は、アクセラレートできません。
ACCELERATION WAITFORDATA
Db2 がクエリを実行する前に発生したコミットされた データ変更のレプリケーションをアクセラレータが待機する間、アクセラレータがクエリを遅延させる最大時間を指定します。 Db2 静的加速照会の場合は、この関数またはプロシージャーの QUERYACCELERATION バインド・オプションを NONE 以外の有効な値に設定して、静的照会を加速化することを要求する必要があります。 QUERYACCELERATION バインド・オプション値が NONE に設定されている場合、ACCELERATIONWAITFORDATA バインド・オプションが受け入れられ、パッケージはオプション値とバインドされます。ただし、静的 SQL 照会は加速化されないため、このオプションは静的 SQL 照会には適用されません。
動的加速照会の場合、ACCELERATION WAITFORDATA バインド・オプションを指定すると、CURRENT QUERY ACCELERATION WAITFORDATA 特殊レジスターも初期化されます。この特殊レジスターは、関数またはプロシージャー・オプション DEFAULT SPECIAL REGISTERS も使用される場合に、Db2関数またはプロシージャーの動的照会に使用されます。 CURRENT QUERY ACCELERATION WAITFORDATA を 0 より大きい値に初期設定すると、Db2およびアクセラレーターは、Db2関数またはプロシージャーから加速化されるすべての動的 SQL 照会に WAITFORDATA 遅延動作と制限を適用することを指定します。 CURRENT QUERY ACCELERATION 特殊レジスターも、動的照会の加速化を要求するために NONE 以外の有効な値を持っている必要があります。
- nnnn.m
- DECIMAL (5,1) 数値定数値を指定します。これは、Db2が照会を実行する前に発生したコミット済み Db2データ変更の複製をアクセラレーターが待機している間に、アクセラレーターが照会を遅延させる最大秒数を指定します。
0.0 ~ 3600.0 秒の範囲で値を指定できます。 例えば、20.0 の値は 20.0 秒 (または 20000 ミリ秒) を表し、30.5 の値は 30.5 秒 (または 30500 ミリ秒) を表します。 3600.0 の最大値は、照会が 3600 秒間遅延されることを意味します。
また、INTEGER数値定数として0~3600秒の範囲の値を指定することもでき、 Db2 がDECIMAL(5,1)値に変換します。
重要 : ACCELERATIONWAITFORDATAバインドオプションにゼロ以外の値が指定された場合、 Db2 およびアクセラレータは、アプリケーションパッケージから高速化されるすべてのクエリに、他のWAITFORDATA遅延動作、制限、および要件を適用します。 これらの動作、制限、および要件により、以前は正常に加速されていた照会が加速されなくなったり、失敗したりする可能性があります。 WAITFORDATAの動作、制限、要件に関する詳細は、「SET CURRENT QUERY ACCELERATION WAITFORDATA ステートメント」 を参照してください。
ACCELERATOR
アクセラレータ・サーバを指定します。このアクセラレータ・サーバが有効で利用可能な場合、 Db2 は、他のアクセラレータ・サーバにクエリを送信する前に、対象となる SQL クエリの優先アクセラレータとして考慮します。 指定されたアクセラレーター・サーバーが有効でないか、利用可能でない場合、 Db2 、利用可能な他のアクセラレーター・サーバーにクエリーを送信する。
- VALIDATE RUN または VALIDATE BIND
- バインド中または再バインド中に検出される「OBJECT NOT FOUND」および「NOT AUTHORIZED」のタイプのエラーを、実行時に再検査するかどうかを指定します。 オブジェクトおよび必要な特権がすべて存在する場合、このオプションは効果がありません。
- 検証実行
- CREATE ステートメントの処理時に必要なオブジェクトまたは特権が存在しない場合、警告メッセージは戻すが、CREATE ステートメントの処理は正常に終了することを指定します。 Db2サブシステムは、CREATE ステートメントの処理中に検査に失敗した SQL ステートメントについて、実行時にオブジェクトと特権を再検査します。 この許可により、ルーチンの所有者の許可 ID の使用がチェックされます。
VALIDATE RUN がデフォルトです。
- VALIDATE BIND
- CREATE ステートメントの処理時に必要なオブジェクトまたは特権が存在しない場合、エラーが出されて、CREATE ステートメントは失敗することを指定します。
- ROUNDING
- DECFLOAT データの操作に対して丸めモードを指定します。 デフォルト値は、DECP の中の DEFAULT DECIMAL FLOATING POINT ROUNDING MODE から取り出されます。
- DEC_ROUND_CEILING
- 数値は正の無限大に近い方の値に丸められることを指定します。
- DEC_ROUND_DOWN
- 数値は 0 に近い方の値に丸められる (切り捨て) ことを指定します。
- DEC_ROUND_FLOOR
- 数値は負の無限大に近い方の値に丸められることを指定します。
- DEC_ROUND_HALF_DOWN
- 数値は最も近い値に丸められることを指定します。両側の値と等距離の場合は、切り捨てられます。
- DEC_ROUND_HALF_EVEN
- 数値は最も近い値に丸められることを指定します。両側の値と等距離の場合は、最終桁が偶数になるように丸められます。
- DEC_ROUND_HALF_UP
- 数値は最も近い値に丸められることを指定します。両側の値と等距離の場合は、切り上げられます。
- DEC_ROUND_UP
- 数値は 0 から離れた方の値に丸められることを指定します。
- DATE FORMAT ISO、 EUR、 USA、 JIS、または LOCAL
- 日付または時刻の値のストリング表記である結果値に対して日付形式を指定します。 詳細は、「datetime 値の文字列表現 」を参照してください。
デフォルトの形式は、ルーチンが定義されるシステムのインストール・パネル DSNTIP4 の DATE FORMAT フィールドで指定されます。 LOCAL オプションは、日付出口ルーチンが用意されていなければ、使用でき ません。
- DECIMAL(15 )、 DECIMAL(31 )、 DECIMAL(15 、 s )、または DECIMAL(31 、 s )
- 10 進算術演算で使用される最大精度を指定します。 詳細は、「2つの小数演算子を持つ算術演算 」を参照してください。 デフォルトの形式は、ルーチンが定義されるシステムのインストール・パネル DSNTIPF の DECIMAL ARITHMETIC フィールドで指定されます。 pp. s の形式が指定されている場合、 s は 1 ~ 9 の範囲の数値である必要があります。 s は除算に使用する最小スケールを表します。
- FOR UPDATE CLAUSE OPTIONAL または FOR UPDATE CLAUSE REQUIRED
- カーソルを使用して位置指定更新を
実行する場合に、DECLARE CURSOR ステートメントに対して FOR UPDATE 文節が必要かどうかを指定します。
- 更新条項が必要
- 位置指定更新を行うためにカーソルを使用する場合、FOR UPDATE 文節をカーソル定義の一部として指定する必要があることを指定します。
FOR UPDATE CLAUSE REQUIRED がデフォルトです。
- FOR UPDATE CLAUSE OPTIONAL
- 位置指定更新にカーソルを使用する場合に、FOR UPDATE 文節は指定する必要がないことを示します。 ルーチン本体には、 ユーザーに対して更新許可された列の更新を行う、位置指定 UPDATE ステートメントを含めることができます。
- TIME FORMAT ISO、 EUR、 USA、 JIS、または LOCAL
- 日付または時刻の値のストリング表記である結果値に対して時刻形式を指定します。 詳細は、「datetime 値の文字列表現 」を参照してください。
デフォルトの形式は、ルーチンが定義されるシステムのインストール・パネル DSNTIP4 の TIME FORMAT フィールドで指定されます。 LOCAL オプションは、日付出口ルーチンが用意されていなければ、使用でき ません。
- BUSINESS_TIME SENSITIVE
- 静的および動的 SQL ステートメントでのアプリケーション期間のテンポラル表への参照が、CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの値の影響を受けるかどうかを判別します。
- YES
- アプリケーション期間のテンポラル表への参照は、CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの値の影響を受けます。 YES はデフォルト値です。
- NO
- アプリケーション期間のテンポラル表への参照は、CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの値の影響を受けません。
詳細は、.CURRENT TEMPORAL BUSINESS_TIME 特殊レジスタを参照してください
- SYSTEM_TIME SENSITIVE
- 静的および動的 SQL ステートメントの両方でのシステム期間テンポラル表への参照が、CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターの値の影響を受けるかどうかを決定します。
- YES
- システム期間テンポラル表への参照は、CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターの値の影響を受けます。 YES はデフォルト値です。
- NO
- システム期間テンポラル表への参照は、CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターの値の影響を受けません。
詳細は、CURRENT TEMPORAL SYSTEM_TIME 特殊レジスタを参照してください。
- ARCHIVE SENSITIVE
- SQL ステートメント内のアーカイブ対応表への参照が、SYSIBMADM.GET_ARCHIVE 組み込みグローバル変数の値によって影響を受けるかどうかを決定します。
- YES
- アーカイブ対応表への参照は、組み込みグローバル変数 SYSIBMADM.GET_ARCHIVE の値の影響を受けます。 YES はデフォルト値です。
- NO
- アーカイブ対応表への参照は、組み込みグローバル変数 SYSIBMADM.GET_ARCHIVE の値の影響を受けません。
関連情報については、 組み込みのグローバル変数 GET_ARCHIVE を参照してください
APPLCOMPAT APPLCOMPATレベル
プロシージャー本体内の静的 SQL ステートメントに対するアプリケーション互換性レベルの動作を指定します。 このオプションを指定しない場合、動作は、APPLCOMPAT サブシステム・パラメーターによって決定されます。次の applcompat-level 値を指定できます
V12R1M5nn

識別された Db2 12 機能レベルの動作との互換性。 例えば、
V12R1M510は、 Db2 12 で利用可能な最も高いファンクション・レベルとの互換性を指定する。 同等以上の機能レベルを活動化する必要があります。
各アプリケーション互換性レベルで使用可能になる新機能については、 V12R1Mnnn アプリケーション互換性レベルを参照してください。
ヒント:
Db2 for z/OS® にアクセスするためにデータサーバークライアントまたはドライバを使用するアプリケーションの互換性レベルを上げるために、余分なプログラム準備ステップが必要になる場合があります。 詳細については、 データサーバークライアントとドライバのアプリケーション互換性レベルの設定を参照してください。

V12R1
Db2 12 ファンクションレベル500の動作との互換性。 この値は、 V12R1M500を指定したのと同じ結果になる。
- V11R1
- Db2 11 新機能モードの動作との互換性。 Db2 12 への移行後、この値は を指定した場合と同じ結果になります。
V12R1M100詳細については、 V11R1 アプリケーションの互換性レベルを参照してください。 - V10R1
- DB2® 10 新機能モードの動作との互換性。 詳細については、 V10R1 アプリケーションの互換性レベルを参照してください。

CONCENTRATE STATEMENTS OFF または CONCENTRATE STATEMENTS WITH LITERALS
FL 500 リテラル定数を指定するルーチン内の各動的 SQL 文を、キャッシュ内の既存の文と共有するのではなく、動的文 キャッシュ内の個別の一意の文エントリとしてキャッシュするかどうかを指定します。 動的 SQL ステートメントでは、キャッシュされているステートメントとは異なるリテラル定数を新規ステートメントで 1 つ以上指定している点を除いて、新規ステートメントが同じ動的ステートメントのキャッシュ・バージョンを共有する条件をすべて満たす場合に、キャッシュ内の既存のステートメントを共有できます。- CONCENTRATE STATEMENTS OFF
リテラル定数を指定する動的 SQL ステートメントが、同じ動的ステートメントのキャッシュ済みバージョンと異なる定数を 1 つ以上指定している場合に、各ステートメントを固有ステートメント・エントリーとしてキャッシュすることを指定します。 CONCENTRATE STATEMENTS OFF が、動的ステートメントのキャッシング動作におけるデフォルトです。
- CONCENTRATE STATEMENTS WITH LITERALS
リテラル定数を指定する各動的 SQL ステートメントは、この新規動的ステートメントが、キャッシュ済みのステートメントを共有する条件をすべて満たし、指定された定数をキャッシュ済みステートメント内の定数に代えて再利用できる場合、同じく CONCENTRATE STATEMENTS WITH LITERALS オプションを使用して準備されている、同じ動的ステートメントのキャッシュ済みバージョンを共有することを指定します。

- SQLルーチン本体
- SQL プロシージャーの本体を定義するステートメントを指定します。 ネイティブSQLプロシージャでサポートされているSQL制御文については、 SQL手続き言語(SQL PL )を参照してください。 SQL-procedure-statement がプロシージャー本体の中で唯一のステートメントである場合は、そのステートメントをセミコロンで終了してはなりません。
WRAPPED 難読化ステートメント・テキスト
FL 500 関数のエンコードされた定義を指定します。 WRAP スカラー関数を使用して CREATE PROCEDURE ステートメント
をエンコードできます。
静的な CREATE ステートメント、または既存のプロシージャーのバージョンを追加または置換する CREATE ステートメントでは、WRAPPED を指定しないでください。

CREATE PROCEDURE(SQL - ネイティブ)に関する注釈
- すべてのタイプのプロシージャーに関する考慮事項
- すべてのプロシージャに共通する事項については、「CREATE PROCEDURE ステートメント(概要)」 を参照してください。
- SQLプロシージャにおけるエラー処理
- プロシージャー本体の各 SQL ステートメントに対して発生する可能性がある例外を考慮する必要があります。 例外 SQLSTATE は、コンパウンド・ステートメント内のハンドラーを使用してプロシージャー内で処理されないと、プロシージャーの呼び出し元に戻されます。
- 手順のバージョン
FL 507 SQLプロシージャのCREATE PROCEDURE文は、プロシージャの初期バージョンを定義します。 プロシージャーが既に存在する場合には、ALTER PROCEDURE ステートメントの ADD VERSION 文節を使用して、または OR REPLACE 文節と VERSION 文節を含む CREATE PROCEDURE ステートメントを使用して追加のバージョンを定義することができます。 プロシージャーが既に存在する場合には、ALTER PROCEDURE の REPLACE VERSION 文節を使用して、または OR REPLACE 文節と VERSION 文節を含む CREATE PROCEDURE ステートメントを使用してバージョンを置換することができます。パラメーターのデータ・タイプ、CCSID 仕様、および文字データ属性 (FOR BIT/SBCS/MIXED DATA) は、OR REPLACE が指定されており、VERSION キーワードが指定されていない場合を除き、プロシージャーの現在のアクティブ・バージョンに対応するパラメーターの属性と同じでなければなりません。
重要: Db2 で提供されている手順の追加バージョンを作成する際には、VERSIONキーワードを指定しないでください。 Db2 で提供されているバージョンだけがサポートされています。 このようなルーチンの追加のバージョンを作成すると、提供されているルーチンのインストールと構成は失敗します。
TABLE LIKE name AS LOCATOR句を使用して定義された既存のプロシージャに関する考察
FL 507 既存のネイティブ SQL プロシージャがテーブル・パラメータ(パラメータの 1 つが移行テーブルであることを示すために、元の CREATE PROCEDURE 文で TABLE LIKE name AS LOCATOR 節が指定されている)を使用して定義されている場合、CREATE PROCEDURE 文を使用してプロシージャを変更し、プロシージャのバージョンを追加または置換することはできません。 この場合、プロシージャーをドロップして再作成する必要があります。
- プロシージャ用に生成されたパッケージの特徴
- 最初のバージョンのプロシージャーに関連するパッケージは、以下のようにして名前を指定します。
- location は、CURRENT SERVER 特殊レジスターの値に設定されます。
- このパッケージ用の collection-id (スキーマ) はこのプロシージャーのスキーマ修飾子と同じです。
- package-id は、プロシージャーの固有名と同じです。
- version-id は、プロシージャーの初期バージョンのバージョン ID と同じです。
パッケージの名前の collection-id を変更したい場合は、そのパッケージのコピーを作成する必要があります。
パッケージは、暗黙的または明示的に指定されたプロシージャー・オプションに対応するバインド・オプションを使用して生成されます。 詳細は、「手続きオプションとBINDオプションの対応」の表を参照してください。 対応するバインド・オプション以外に、パッケージは以下のバインド・オプションを使用して生成されます。
- dbプロトコル(drda)
- FLAG(1)
- SQLERROR(NOPACKAGE)
- イネーブル(*)
- バインド・オプションに対するプロシージャー・オプションの対応
以下の表は、特定のCREATE PROCEDUREおよびALTER PROCEDUREオプションに対応するbindコマンドオプションをまとめたものです。 バインドオプションの詳細については、「パッケージ、プラン、およびサービスのBINDおよびREBINDオプション」 を参照してください。
バインド・オプションに対するプロシージャー・オプションの対応CREATE PROCEDURE または ALTER PROCEDURE オプション バインド・コマンド・オプション
加速ウェイトフォードアータ nnnn.m
accelerationwaitfordata() nnnn.m )
アクセラレータ名
ACCELERATOR( アクセラレータ名 )
APPLICATION ENCODING SCHEME ASCII ENCODING(ASCII) APPLICATION ENCODING SCHEME EBCDIC ENCODING(EBCDIC) APPLICATION ENCODING SCHEME UNICODE ENCODING(UNICODE) ARCHIVE SENSITIVE NO ARCHIVESENSITIVE(NO) ARCHIVE SENSITIVE YES ARCHIVESENSITIVE(YES) BUSINESS_TIME SENSITIVE NO BUSTIMESENSITIVE(NO) BUSINESS_TIME SENSITIVE YES BUSTIMESENSITIVE(YES) CURRENT DATA NO CURRENTDATA(NO) CURRENT DATA YES CURRENTDATA(YES) DEFER PREPARE DEFER(PREPARE) NODEFER PREPARE NODEFER(PREPARE) DEGREE 1 DEGREE(1) DEGREE ANY DEGREE(ANY) DYNAMICRULES RUN DYNAMICRULES(RUN) DYNAMICRULES BIND DYNAMICRULES(BIND) DYNAMICRULES DEFINEBIND DYNAMICRULES(DEFINEBIND) DYNAMICRULES DEFINERUN DYNAMICRULES(DEFINERUN) DYNAMICRULES INVOKEBIND DYNAMICRULES(INVOKEBIND) DYNAMICRULES INVOKERUN DYNAMICRULES(INVOKERUN) GET_ACCEL_ARCHIVE NO GETACCELARCHIVE(NO) GET_ACCEL_ARCHIVE YES GETACCELARCHIVE(YES) ISOLATION LEVEL CS ISOLATION(CS) ISOLATION LEVEL RS ISOLATION(RS) ISOLATION LEVEL RR ISOLATION(RR) ISOLATION LEVEL UR ISOLATION(UR) OPTHINT 文字列定数 OPTHINT(hint-id) PACKAGE OWNER authorization-name OWNER(authorization-id) 修飾子スキーマ名 QUALIFIER(qualifier-name) QUERY ACCELERATION NONE QUERYACCELERATION(NONE) QUERY ACCELERATION ENABLE QUERYACCELERATION(ENABLE) QUERY ACCELERATION ENABLE WITH FAILBACK QUERYACCELERATION(ENABLE WITH FAILBACK) QUERY ACCELERATION ELIGIBLE QUERYACCELERATION(ELIGIBLE) QUERY ACCELERATION ALL QUERYACCELERATION(ALL) コミット時にリリース RELEASE(COMMIT) DEALLOCATE時に解放 RELEASE(DEALLOCATE) REOPT ALWAYS REOPT(ALWAYS) REOPT NONE REOPT(NONE) REOPT ONCE REOPT(ONCE) ROUNDING DEC_ROUND_CEILING ROUNDING(CEILING) ROUNDING DEC_ROUND_DOWN ROUNDING(DOWN) ROUNDING DEC_ROUNDING_FLOOR ROUNDING(FLOOR) ROUNDING DEC_ROUNDING_HALF_DOWN ROUNDING(HALFDOWN) ROUNDING DEC_ROUNDING_HALF_EVEN ROUNDING(HALFEVEN) ROUNDING DEC_ROUNDING_HALF_UP ROUNDING(HALFUP) ROUNDING DEC_ROUNDING_UP ROUNDING(UP) SQL PATH path-specification PATH(path-specification) SYSTEM_TIME SENSITIVE NO SYSTIMESENSITIVE(NO) SYSTEM_TIME SENSITIVE YES SYSTIMESENSITIVE(YES) VALIDATE BIND VALIDATE(BIND) VALIDATE RUN VALIDATE(RUN) WITH EXPLAIN EXPLAIN(YES) WITHOUT EXPLAIN EXPLAIN(NO) WITH IMMEDIATE WRITE IMMEDWRITE(YES) WITHOUT IMMEDIATE WRITE IMMEDWRITE(NO) WITH KEEPDYNAMIC KEEPDYNAMIC(YES) WITHOUT KEEPDYNAMIC KEEPDYNAMIC(NO) - プロシージャー・オブジェクトのアプリケーション互換性レベルの考慮事項
- アプリケーション互換性レベルは、新機能および機能拡張の採用と使用を制御します。 オブジェクトが作成または変更されると、2 つの別個のアプリケーション互換性レベルが使用されます。1 つはオブジェクトの定義を処理するために使用され、もう 1 つはオブジェクト本体内の SQL ステートメントを処理するために使用されます。
オブジェクト定義 CURRENT APPLICATION COMPATIBILITY 特殊レジスター値は、オブジェクト本体内のステートメントを除き、オブジェクト定義を処理するために使用されます
このアプリケーション互換性レベルは、SYSENVIRONMENT.APPLCOMPAT 列に保管されます。 オブジェクトのカタログ定義内の環境 ID 値を使用して、ENVID 値が一致する SYSENVIRONMENT 行を見つけることができます。
このアプリケーション互換性レベルは、オブジェクトの再生成時に変更できます。
オブジェクト本体内のステートメント CREATE または ALTER ステートメントの APPLCOMPAT オプションで暗黙的または明示的に指定されたアプリケーション互換性レベルは、オブジェクト本体のステートメントを処理するために使用されます。
このアプリケーション互換性レベルは、オブジェクト定義に関連付けられたパッケージの SYSPACKAGE.APPLCOMPAT 列に保管されます。
- SQLプロセッサプログラムの考慮事項
- SPUFI、 Db2 command line processor、 DSNTEP2 などのSQLプロセッサプログラムは、CREATE PROCEDURE文のルーチン本体でセミコロンで終わるSQLステートメントを正しく解析できない場合があります。 これらのプロセッサー・プログラムは、複数の SQL ステートメント (各ステートメントは終了文字で分離されている) を入力として受け入れます。 セミコロンをSQL文の終端記号として使用するプロセッサプログラムでは、セミコロンが埋め込まれたCREATE PROCEDURE文が切り捨てられ、その一部のみが Db2 に渡される可能性があります。 そのため、これらのプロセッサー・プログラムの場合は、SQL 終了文字の変更が必要に なる可能性があります。 詳細は、「SPUFI 入力データセットにおける SQL ターミネータ文字の設定 」および 「 DSNTEP2 および DSNTEP4 サンプルプログラムにおける SQLTERM」を参照してください。
- ID 解決
- SQLルーチン内で名前が列、変数、SQLパラメータに解決される方法については、 SQL手続き言語(SQL PL )を参照してください。
列、変数、およびパラメーターに重複する名前が使用されている場合は、列の表指定子、パラメーターのルーチン名、SQL 変数のラベル名、およびグローバル変数のスキーマ名を使用して、重複名を修飾してください。
- SQLプロシージャ定義内の行
- SQL プロシージャーが作成されるときに、情報は CREATE ステートメント内の行に保持されます。 行数は、改行の制御文字の存在によって決まります。
SQLプロシージャでは、 改行制御文字は改行に使われる特殊文字です。 SQL プロシージャーの改行制御文字には、次のものがあります。- 改行 (ライン・フィード)
- 改行 (ニュー・ライン)
- 復帰
- 復帰のあとに改行 (ライン・フィード)
- 復帰のあとに改行 (ニュー・ライン)

- 配列タイプとして定義されているパラメーターを持つストアード・プロシージャー:
- 配列型であるパラメータで定義されたプロシージャは、配列グローバル変数以外の場合は、CALL文の対応する引数が配列グローバル変数でない限り、SQL PLコンテキスト内、または IBM® Data Server Driver for JDBC and SQLJ タイプ4接続を使用するJava™アプリケーションプログラム内からのみ呼び出すことができます。 CALL ステートメントの対応する引数が配列グローバル変数である場合は、SQL PL コンテキストの外部からプロシージャーを呼び出すことができます。
難読化された声明
ネイティブ SQL プロシージャーに対する CREATE PROCEDURE ステートメントは、難読化形式で実行できます。 難読化されたステートメントでは、プロシージャー名、パラメーター、および WRAPPED キーワードのみを判読できます。 ステートメントのその他の部分は、読み取り不能な、しかも難読化ステートメントをサポートするデータベース・サーバーでデコード可能な方法でエンコードされます。 WRAP スカラー関数は、難読化されたステートメントを作成します。 難読化されたステートメントから関数が
作成されるときに指定されるデバッグ・オプションはすべて無視されます。
- 互換性
- 以前のバージョンのDb2との互換性を得るために、以下の節を指定することができます。ただし、これらは無視され、警告が出されます。
- STAY RESIDENT
- PROGRAM TYPE
- RUN OPTIONS
- NO DBINFO
- COLLID または NOCOLLID
- セキュリティー
- PARAMETER STYLE GENERAL WITH NULLS
- STOP AFTER SYSTEM DEFAULT FAILURES
- nn回失敗したら停止する
- CONTINUE AFTER FAILURES
- PARAMETER VARCHAR
FENCED または EXTERNAL 文節を指定すると、外部 SQL プロシージャーが生成されます。 詳細は CREATE PROCEDURE 文(SQL - 外部プロシージャ)(非推奨 )を参照してください。
FOR DEBUG MODE キーワードを無指定で WLM ENVIRONMENT を指定すると、エラーが戻されます。 ネイティブ SQL プロシージャーに対して WLM ENVIRONMENT を指定する場合、WLM ENVIRONMENT FOR DEBUG MODE を指定する必要があります。
- 代替構文およびシノニム
- Db2ファミリー内のDb2または他の製品の以前のリリースとの互換性を提供するために、Db2は以下の代替構文をサポートします。
- DYNAMIC RESULT SETS のシノニムとして RESULT SET および RESULT SETS
- NOT DETERMINISTIC のシノニムとして VARIANT
- DETERMINISTIC のシノニムとして NOT VARIANT
- CALLED ON NULL のシノニムとして NULL CALL
CREATE PROCEDURE の例(SQL - ネイティブ)
- 例 1
SQL プロシージャーの定義を作成します。 プロシージャーは、従業員番号と昇給率を入力として受け入れます。 プロシージャー本体で、次のタスクが実行されます。
- 従業員の新規給与を計算します。
- 新しい給与の値で従業員表を更新します。
CREATE PROCEDURE UPDATE_SALARY_1 (IN EMPLOYEE_NUMBER CHAR(10), IN RATE DECIMAL(6,2)) LANGUAGE SQL MODIFIES SQL DATA UPDATE EMP SET SALARY = SALARY * RATE WHERE EMPNO = EMPLOYEE_NUMBER- 例 2
例 1 で説明した SQL プロシージャーの定義を作成します。ただし、プロシージャーに以下の特性があることを指定します。
- 入力が同じであれば、常に同じ出力を生成します。
- SQL 作業は、呼び出し元に戻る際にコミットされます。
CREATE PROCEDURE UPDATE_SALARY_1 (IN EMPLOYEE_NUMBER CHAR(10), IN RATE DECIMAL(6,2)) LANGUAGE SQL MODIFIES SQL DATA DETERMINISTIC COMMIT ON RETURN YES UPDATE EMP SET SALARY = SALARY * RATE WHERE EMPNO = EMPLOYEE_NUMBER- 例 3:
- IN パラメーターおよび OUT パラメーターとして配列を使用する SQL プロシージャーの定義を作成します。 プロシージャーの名前は GETWEEKENDS です。 入力として DATE 値の配列を受け入れ、土曜日または日曜日になる日付のみが入っている配列を返します。 例えば、入力日付が、土曜日、金曜日、日曜日である場合、プロシージャーは土曜日と日曜日になる日付のみを戻します。
以下のユーザー定義配列タイプが定義されているものとします。
CREATE TYPE DATEARRAY AS DATE ARRAY[100];配列タイプが作成された後、その配列タイプへの参照はすべて、完全修飾されたユーザー定義配列タイプ名を指定する必要があります。 その他の場合、そのタイプのスキーマが CURRENT PATH 内である必要があります。
SQL プロシージャーが次のように定義されているものとします。
CREATE PROCEDURE GETWEEKENDS(IN MYDATES DATEARRAY, OUT WEEKENDS DATEARRAY) BEGIN -- ARRAY INDEX VARIABLES DECLARE DATEINDEX, WEEKENDINDEX INT DEFAULT 1; -- VARIABLE TO STORE THE ARRAY LENGTH OF MYDATES, -- INITIALIZED USING THE CARDINALITY FUNCTION. DECLARE DATESCOUNT INT; SET DATESCOUNT = CARDINALITY(MYDATES); -- FOR EACH DATE IN MYDATES, IF THE DATE IS A SUNDAY OR SATURDAY, -- ADD IT TO THE OUTPUT ARRAY NAMED "WEEKENDS" WHILE DATEINDEX <= DATESCOUNT DO IF DAYOFWEEK(MYDATES[DATEINDEX]) IN (1, 7) THEN SET WEEKENDS[WEEKENDINDEX] = MYDATES[DATEINDEX]; SET WEEKENDINDEX = WEEKENDINDEX + 1; END IF; SET DATEINDEX = DATEINDEX + 1; END WHILE; ENDまた、入力配列 MYDATES に、次の内容が含まれるとします。
['2012-04-28', '2012-02-10','2012-03-18']プロシージャーが戻された後で、出力配列 WEEKENDS には、次の内容が含まれます。
['2012-04-28', '2012-03-18'] - 例 4
- OUT パラメーターとして配列を使用する SQL プロシージャーの定義を作成します。 プロシージャーの名前は GET_PHONES です。 従業員 1775 の電話番号を含む配列を戻します。 この従業員に対して電話番号が 5 つよりも多く存在している場合、配列は 5 つのみのエレメントに対して定義されているため、エラーが戻されます。
以下のユーザー定義配列タイプと表が定義されているものとします。
CREATE TYPE PHONELIST AS DECIMAL(10, 0) ARRAY[5]; CREATE TABLE EMP_PHONES(ID INTEGER, PHONENUMBER DECIMAL(10,0));SQL プロシージャーは次のように定義されます。
CREATE PROCEDURE GET_PHONES(OUT EPHONES PHONELIST) BEGIN SELECT ARRAY_AGG(PHONENUMBER) INTO EPHONES FROM EMP_PHONES WHERE ID = 1775; END
SQLプロシージャの例については、 SQL手続き言語(SQL PL) を参照してください。
