ALTER PROCEDURE 文(SQL - ネイティブプロシージャ)

ALTER PROCEDURE ステートメントは、現行サーバーにある SQL プロシージャーの定義を変更します。 プロシージャー・オプション、パラメーター名、およびルーチン本体を変更可能であり、このプロシージャーの追加バージョンを ALTER PROCEDURE ステートメントを使って定義と保守を行うことができます。

ネイティブSQLプロシージャでサポートされているSQL制御文については、 SQLプロシージャ言語(SQL PL) を参照してください。

ALTER PROCEDURE(SQL - ネイティブ)の呼び出し

これは、動的ルール実行の動作が有効な場合にのみ、動的に準備できます。 詳細は、「Authorization IDs and dynamic SQL」 を参照してください。

ALTER PROCEDURE(SQL - ネイティブ)の権限

以下に定義する特権セットには、少なくとも次のいずれかが含まれていなければいけません。

  • プロシージャーの所有権
  • スキーマに対する ALTERIN 特権
  • システム DBADM
  • SYSCTRL 権限
  • SYSADM
  • インストール SYSOPR 権限 (プロセスの現行 SQLID が SYSINSTL に設定されている場合)

スキーマ名と一致する許可 ID は、そのスキーマに対する ALTERIN 特権を暗黙的に持ちます。

プロシージャーの変更に使用される許可 ID にインストール SYSADM 権限またはインストール SYSOPR 権限があり、現行の SQLID が SYSINSTL に設定されている場合、プロシージャーは、プロシージャー定義の再評価時にシステム定義関数として識別されます。

以下の場合には、さらに特権が必要になる可能性があります。

  • SQL-routine-bodyが指定された場合、権限セットには SQL-routine-body 内の文の実行に必要な権限が含まれていなければならない。
  • パラメータのデータ型としてユーザー定義型を参照する場合、権限セットには以下の権限または権限の少なくとも1つも含まれていなければならない:
    • ユーザー定義タイプの所有権
    • ユーザー定義タイプに対する USAGE 特権
    • システム DBADM 権限
    • DATAACCESS 権限
    • SYSADM 権限
  • プロシージャーがパラメーターとして表を使用する場合、特権セットには、以下の特権または権限のうち少なくとも 1 つも含まれている必要があります。
    • 表の所有権
    • 表に対する SELECT 特権
    • DATAACCESS 権限
    • SYSADM 権限
  • WLM環境のデバッグモードの節を指定すると、 RACF® または外部セキュリティ製品が起動され、WLM環境でプログラムを定義するために必要な権限がチェックされます。 WLM 環境アクセスが RACF で保護されている場合、特権セットには必要な権限が含まれている必要があります。 詳細については、「WLM環境におけるストアドプロシージャ作成の権限管理 」を参照してください。
  • プロシージャの新しいバージョンを定義する場合(ADD VERSION 節を使用)、または既存のバージョンを置き換える場合(REPLACE VERSION 節を使用)、権限セットには、インストール・パネル DSNTIPP の BIND NEW PACKAGE フィールドの値に応じて、新しいパッケージまたは既存のパッケージの新しいバージョンを追加するために必要な権限が含まれていなければなりません。 プロシージャー・パッケージのオーナーは、 SQL-ルーチン本体内のステートメントを実行するために必要な権限を持っていなければなりません。

プロシージャー定義の内容によっては、SYSDUMMYx 表に対して追加の許可が必要になる場合があります。 SYSDUMMYx 表を参照してください。

特権セット:

アプリケーション・プログラムにこの ステートメントを組み込む場合、特権セットは、パッケージの所有者が持つ特権となります。

このステートメントが動的に準備される場合、特権セットは、プロセスの SQL 許可 ID が 持つ特権セットとなります。 指定されたルーチン名に、スキーマ名 (修飾子) を組み込むことができます。 ただし、スキーマ名が上記の SQL 許可 ID のいずれかと同じ でない場合、以下のいずれかの条件が満たされていなければなりません。
  1. 特権セットに SYSADM 権限が含まれている
  2. 特権セットに SYSCTRL 権限が含まれている
  3. プロセスの SQL 許可 ID には、そのスキーマに対する ALTERIN 特権がある。
変更の開始FL 500 ロールをオブジェクト所有者として使用するように定義されたトラステッド コンテキストで ALTER PROCEDURE が発行され、所有者のタイプが指定されていない場合、デフォルトのパッケージ所有者は次のように決定されます。
  • PACKAGE OWNER オプションが指定されていない場合は、ユーザーに関連付けられているロールがパッケージ所有者になります。
  • PACKAGE OWNER オプションが指定されている場合は、PACKAGE OWNER オプションで指定されたロールがパッケージ所有者になります。 トラステッド・コンテキストでは、指定された PACKAGE OWNER はロールである必要があります。
変更の終わり

ALTER PROCEDURE の構文(SQL - ネイティブ)

構文図を読むビジュアルシンタックスダイアグラムをスキップするALTER PROCEDUREprocedure-nameALTERACTIVE VERSIONALL VERSIONSVERSIONroutine-version-idoption-listREPLACEACTIVE VERSIONVERSIONroutine-version-idroutine-specificationADD VERSIONroutine-version-idroutine-specificationACTIVATE VERSIONroutine-version-idREGENERATEACTIVE VERSIONVERSIONroutine-version-idUSINGAPPLICATION COMPATIBILITYAPPLCOMPATアップコンパトレベルDROP VERSIONroutine-version-id

routine-specification:

構文図を読むビジュアルシンタックスダイアグラムをスキップする (,parameter-declaration)1 option-list SQL-routine-body
注:
  • 1 手順のすべてのバージョンは、パラメータの数が同じでなければなりません。

parameter-declaration:

構文図を読むビジュアルシンタックスダイアグラムをスキップする INOUTINOUT parameter-nameData-type

データ・タイプ:

構文図を読むビジュアルシンタックスダイアグラムをスキップするbuilt-in-typedistinct-type-namearray-type-name

built-in-type:

構文図を読むビジュアルシンタックスダイアグラムをスキップするSMALLINTINTEGERINTBIGINTDECIMALDECNUMERIC(5,0)( 整数整数)FLOAT(53)( 整数)REALDOUBLEPRECISIONDECFLOAT(34)(16)CHARACTERCHAR(1)( 整数)CHARACTERCHARVARYINGVARCHAR( 整数)FORSBCSMIXEDBITDATACCSIDASCIIEBCDICUNICODECHARACTERCHARLARGE OBJECTCLOB(1M)( 整数KMG)FORSBCSMIXEDDATACCSIDASCIIEBCDICUNICODEGRAPHIC(1)( 整数)VARGRAPHIC( 整数)DBCLOB(1M)( 整数KMG)CCSIDASCIIEBCDICUNICODEBINARY(1)( 整数)BINARY VARYINGVARBINARY( 整数)BINARY LARGE OBJECTBLOB(1M)( 整数KMG)DATETIMETIMESTAMP(6)(整数)WITHOUT TIME ZONEWITH TIME ZONEXML

option-list: (オプションは任意の順序で指定できますが、各オプションが指定できるのは 1 回限りです。)

構文図を読むビジュアルシンタックスダイアグラムをスキップする NOT DETERMINISTICDETERMINISTIC MODIFIES SQL DATAREADS SQL DATACONTAINS SQL CALLED ON NULL INPUT DYNAMIC RESULT SETS整数 DISALLOW DEBUG MODEALLOW DEBUG MODEDISABLE DEBUG MODE PARAMETER CCSID ASCIIPARAMETER CCSID EBCDICPARAMETER CCSID UNICODE QUALIFIERschema-name PACKAGE OWNERauthorization-nameASROLEUSER ASUTIME NO LIMITASUTIME LIMIT整数 COMMIT ON RETURN NOCOMMIT ON RETURN YESAUTONOMOUS INHERIT SPECIAL REGISTERSDEFAULT SPECIAL REGISTERS WLM ENVIRONMENT FOR DEBUG MODE名前 DEFER PREPARENODEFER PREPARE CURRENT DATA NOCURRENT DATA YES DEGREE 1DEGREE ANY CONCURRENT ACCESS RESOLUTIONUSE CURRENTLY COMMITTEDCONCURRENT ACCESS RESOLUTIONWAIT FOR OUTCOME DYNAMICRULES RUNDYNAMICRULES BINDDYNAMICRULES DEFINEBINDDYNAMICRULES DEFINERUNDYNAMICRULES INVOKEBINDDYNAMICRULES INVOKERUNAPPLICATION ENCODING SCHEME ASCIIAPPLICATION ENCODING SCHEME EBCDICAPPLICATION ENCODING SCHEME UNICODEWITHOUT EXPLAINWITH EXPLAINWITHOUT IMMEDIATE WRITEWITH IMMEDIATE WRITEISOLATION LEVEL CSISOLATION LEVEL RSISOLATION LEVEL RRISOLATION LEVEL URWITHOUT KEEP DYNAMICWITH KEEP DYNAMICOPTHINT''OPTHINTひもていすうSQL PATH,schema-nameSYSTEM PATHSESSION USERUSERRELEASE AT COMMITRELEASE AT DEALLOCATEQUERY ACCELERATION NONEQUERY ACCELERATION ENABLEQUERY ACCELERATION ENABLE WITH FAILBACKQUERY ACCELERATION ELIGIBLEQUERY ACCELERATION ALLGET_ACCEL_ARCHIVE NOGET_ACCEL_ARCHIVE YESACCELERATION WAITFORDATAnnnn.mACCELERATORaccelerator-nameREOPT NONEREOPT ALWAYSREOPT ONCEVALIDATE RUNVALIDATE BINDROUNDING DEC_ROUND_CEILINGROUNDING DEC_ROUND_DOWNROUNDING DEC_ROUND_FLOORROUNDING DEC_ROUND_HALF_DOWNROUNDING DEC_ROUND_HALF_EVENROUNDING DEC_ROUND_HALF_UPROUNDING DEC_ROUND_UPDATE FORMAT ISODATE FORMAT EURDATE FORMAT USADATE FORMAT JISDATE FORMAT LOCALDECIMAL(15)DECIMAL(31)DECIMAL(15, s)DECIMAL(31, s)FOR UPDATE CLAUSE REQUIREDFOR UPDATE CLAUSE OPTIONALTIME FORMAT ISOTIME FORMAT EURTIME FORMAT USATIME FORMAT JISTIME FORMAT LOCALBUSINESS_TIME SENSITIVEYESBUSINESS_TIME SENSITIVENOSYSTEM_TIME SENSITIVEYESSYSTEM_TIME SENSITIVENOARCHIVE SENSITIVEYESARCHIVE SENSITIVENOAPPLCOMPATアップコンパトレベルCONCENTRATE STATEMENTSOFFCONCENTRATE STATEMENTSWITH LITERALS

SQL-routine-body:

構文図を読むビジュアルシンタックスダイアグラムをスキップするSQL 制御ステートメントALTER DATABASE ステートメントALTER FUNCTION文(外部スカラー、外部テーブル、ソース付き、SQLスカラー、またはSQLテーブル)ALTER INDEX ステートメントALTER PROCEDURE 文(外部、SQL - 外部、または SQL - ネイティブ)ALTER SEQUENCE ステートメントALTER STOGROUP ステートメントALTER TABLE ステートメントALTER TABLESPACE ステートメントALTER TRUSTED CONTEXT ステートメントALTER VIEW ステートメントCOMMENT ステートメントCOMMIT ステートメントCONNECT ステートメントCREATE ALIAS ステートメントCREATE DATABASE ステートメントCREATE FUNCTION 文(外部スカラー、外部テーブル、またはソース)CREATE GLOBAL TEMPORARY TABLE ステートメントCREATE INDEX ステートメントCREATE PROCEDURE (外部) ステートメントCREATE ROLE ステートメントCREATE SEQUENCE ステートメントCREATE STOGROUP ステートメントCREATE SYNONYM ステートメントCREATE TABLE ステートメントCREATE TABLESPACE ステートメントCREATE TRUSTED CONTEXT ステートメントCREATE TYPE ステートメントCREATE VIEW ステートメントDECLARE GLOBAL TEMPORARY TABLE ステートメントDELETE ステートメントDROP ステートメントEXCHANGE ステートメントEXECUTE IMMEDIATE ステートメントGRANT ステートメントINSERTステートメントLABEL ステートメントLOCK TABLE ステートメントMERGE ステートメントREFRESH TABLE ステートメントRELEASE ステートメントRELEASE SAVEPOINT ステートメントRENAME ステートメントREVOKE ステートメントROLLBACK ステートメントSAVEPOINT ステートメントSELECT INTO ステートメントSET CONNECTION ステートメントSET 特殊レジスタ文TRUNCATE ステートメントUPDATE ステートメントVALUES INTO ステートメント12
注:
  • 1 ALTER FUNCTION(SQLスカラー)文またはALTER PROCEDURE(SQLネイティブ)文で、ADD VERSIONまたはREPLACE句を含むものは、 SQLルーチン本体では許可されていません。
  • 2 ルーチンがSQLルーチン、外部ルーチン、またはトリガーの呼び出しチェーンにある場合、ルーチンの本体でCOMMIT文およびROLLBACK文(TO SAVEPOINT節なし)を発行してはなりません。

ALTER PROCEDURE(SQL - ネイティブ)の説明

プロシージャー名
変更するプロシージャーを指定します。 procedure-name で指定したプロシージャーは、現行サーバーに存在していなければなりません。

プロシージャーを難読化してはなりません。

ACTIVE VERSION または ALL VERSIONS または VERSION routine-version-id
ALTER、REPLACE、または REGENERATE キーワードが指定されているかどうかに基づいて、変更、置き換え、または再生成対象のプロシージャーのバージョンを指定します。
重要: Db2 で提供されている手順の追加バージョンを作成する際には、VERSIONキーワードを指定しないでください。 Db2 で提供されているバージョンだけがサポートされています。 このようなルーチンの追加のバージョンを作成すると、提供されているルーチンのインストールと構成は失敗します。
ACTIVE VERSION
変更、置き換え、または再生成対象の、現在アクティブなプロシージャーのバージョンを指定します。

ACTIVE VERSION がデフォルト値です。

ALL VERSIONS
すべてのバージョンのプロシージャーを変更するように指定します。 このオプションが指定されている場合は、以下のオプションのみを変更できます。
  • AUTONOMOUS または COMMIT ON RETURN
VERSION ルーチンバージョンID
変更、置き換え、または再生成対象のプロシージャーのバージョンを指定します。 routine-version-id は、そのバージョンの定義時に割り当てられたバージョン ID です。 routine-version-id には、現行サーバーに存在する指定のプロシージャーのバージョンを示す必要があります。
ALTER
変更対象のプロシージャーのバージョンを指定します。

あるプロシージャーのバージョンを変更して、そのプロシージャーのバージョンの追加または置き換えを行う場合、明示的に指定されていないどのオプションも、変更対象プロシージャーのバージョンからの既存値を使用します。

REPLACE
置き換え対象のプロシージャーのバージョンを指定します。

置き換えられるバージョンのプロシージャーをバインドすると、たとえ、そのルーチン本体を変更していなくとも、新規アクセス・パスが作成される結果となる可能性があります。

あるプロシージャーの置き換え時、そのデータ・タイプ、CCSID 指定、およびパラメーターの文字データ属性 (FOR BIT/SBCS/MIXED DATA) は、現在アクティブなプロシージャー・バージョンに対して対応するパラメーター属性と同じである必要があります。 明示的に指定されていないオプションの場合、置き換え対象のプロシージャー・バージョンに対してそれらのオプションが明示的に指定されていても、それらのオプションに対するシステム・デフォルト値が使用されます。 このことは、DISABLE DEBUG MODE を指定したプロシージャー・バージョンに対しては当てはまりません。 DISABLE DEBUG MODE が、あるプロシージャー・バージョンに指定されていると、REPLACE 文節でそのバージョンを変更できません。 プロシージャー定義が置換されると、そのプロシージャーの定義に関するカタログ内の既存のコメントはすべて除去されます。

バージョンを追加するルーチンバージョンID
作成対象のプロシージャーの新規バージョンを指定します。 routine-version-id は、プロシージャーの新規バージョンのバージョン ID です。 routine-version-id には、現行サーバーに既に存在する、指定されたプロシージャー・バージョンを示さないでください。

あるプロシージャーの新規バージョンを追加する場合、そのデータ・タイプ、CCSID 指定、およびパラメーターの文字データ属性 (FOR BIT/SBCS/MIXED DATA) は、現在アクティブなプロシージャー・バージョンに対して対応するパラメーター属性と同じである必要があります。 このパラメーター名は、プロシージャーの他バージョンとは異なっていても構いません。 明示的に指定されていないオプションの場合、システム・デフォルト値が使用されます。

バージョンをアクティベートするルーチン-バージョン-ID
現在アクティブなプロシージャー・バージョンにする対象のプロシージャー・バージョンを指定します。 routine-version-id は、プロシージャー・バージョンの定義時に割り当てられるバージョン ID です。 routine-version-id を使って定義されたバージョンは、CALL ステートメントが呼び出すバージョンです。このことは、CURRENT ROUTINE VERSION 特殊レジスターの値が、このプロシージャーの呼び出し時にプロシージャーの現在アクティブなバージョンをオーバーライドしているかどうかとは無関係です。 routine-version-id には、現行サーバーに既に存在するプロシージャーのバージョンを示す必要があります。
REGENERATE
プロシージャー・バージョンを再生成します。 SQL プロシージャーの生成方法を変更するためにDb2メンテナンスが適用されると、メンテナンスの変更を処理するためにプロシージャーを再生成する必要がある場合があります。

REGENERATE は、ローカル・サーバー上で、そのプロシージャーに対して SQL 制御ステートメント用のパッケージを再バインドし、プロシージャー本体に含まれる SQL ステートメント用のパッケージを再バインドします。 リモート・バインドも必要となる場合、BIND PACKAGE COPY コマンドをすべてのリモート・サーバーに対して明示的に実行する必要があります。

REGENERATE は REBIND PACKAGE コマンドとは異なっています。このコマンドの場合、SQL ステートメントは再バインド (例えば、それらのステートメントに対してより優れたアクセス・パスを生成するため) されますが、プロシージャー定義にある SQL 制御ステートメントは同じ状態で残ります。

USING APPLICATION COMPATIBILITY applcompat-level
プロシージャーのバージョンを再生成するために使用されるアプリケーションの互換性レベルを指定します。 バージョンの既存の定義に、より上位のアプリケーション互換性レベルを必要とする構文、セマンティクス、またはオプションが含まれている場合、ALTER ステートメントはエラーを戻します。 この状態は、applcompat-level よりも高いプリケーション互換性レベルで実行しているときに、バージョンが最後に定義または再生成されたときに発生する可能性があります。

次の値が指定可能です。

変更の開始V13R1M5nn変更の終わり
変更の開始特定された Db2 13 機能レベルの動作との互換性。 例えば、 V13R1M508 は、 Db2 13 で利用可能な最も高いファンクション・レベルとの互換性を指定する。 同等以上の機能レベルを活動化する必要があります。

変更の開始各アプリケーション互換性レベルで使用可能になる新機能については、 V13R1Mnnn アプリケーション互換性レベルを参照してください。変更の終わり

変更の終わり
V12R1M5nn

識別された Db2 12 機能レベルの動作との互換性。

変更の開始各アプリケーション互換性レベルで使用可能になる新機能については、 V12R1Mnnn アプリケーション互換性レベルを参照してください。変更の終わり

ヒント: 変更の開始 Db2 for z/OS® にアクセスするためにデータサーバークライアントまたはドライバを使用するアプリケーションの互換性レベルを上げるために、余分なプログラム準備ステップが必要になる場合があります。 詳細については、 データサーバークライアントとドライバのアプリケーション互換性レベルの設定を参照してください。変更の終わり
V12R1
Db2 12 機能レベル 500 の動作との互換性。 この値は、 V12R1M500 を指定した場合と同じ結果になります。
V11R1
Db2 11 新機能モードの動作との互換性。
V10R1
DB2® 10 新機能モードの動作との互換性。 詳細については、 V10R1 アプリケーションの互換性レベルを参照してください。

USING APPLICATION COMPATIBILITY が省略されている場合、再生成では、該当する SYSIBM.SYSPACKAGE カタログ表の行の APPLCOMPAT 値が使用されます。

DROP VERSION ルーチンバージョンID
routine-version-id で指定されたプロシージャー・バージョンをドロップします。 routine-version-id は、そのバージョンの定義時に割り当てられたバージョン ID です。 routine-version-id には、現行サーバーに既に存在するプロシージャー・バージョンを指定する必要があり、現在アクティブなプロシージャー・バージョンを指定しないでください。 指定されたプロシージャー・バージョンだけがドロップされます。

現行サーバーに単一バージョンのプロシージャーだけが存在する場合、DROP PROCEDURE ステートメントを使用してそのプロシージャーをドロップします。 CURRENT ROUTINE VERSION 特殊レジスターの内容とバージョン ID が同じであるプロシージャー・バージョンをドロップできます。その条件としては、そのドロップ対象のバージョンが現在アクティブなバージョン・プロシージャーでないことです。

(パラメータ宣言、…)
定義または変更対象のプロシージャー・バージョンに対して、プロシージャーのパラメーター数、各パラメーターのデータ・タイプと使用方法、および各パラメーターの名前を指定します。 パラメーター数および各パラメーターの指定されたデータ・タイプと使用方法は、このプロシージャーの他のすべてのバージョンについて、パラメーターの対応する位置にあるデータ・タイプと一致する必要があります。 データ・タイプのシノニムは一致と見なされます。

IN、OUT、および INOUT はパラメーターの使用方法を指定します。 パラメーターの使用方法は、同じプロシージャーの他のバージョンにおけるパラメーターの暗黙的な使用方法または明示的な使用方法と一致する必要があります。

IN
パラメーターをプロシージャーの入力パラメーターとして指定します。 プロシージャー内でパラメーターが変更されても、 そのプロシージャーの入り口で指定されるパラメーター値が、呼び出し側の SQL アプリケーションに戻される値となります。

デフォルトは IN です。

OUT
パラメーターをプロシージャーによって戻される出力パラメーター として識別します。 プロシージャー内でパラメーターが設定されなければ、NULL 値が戻されます。
INOUT
パラメーターを、プロシージャーの入力および出力パラメーターの両方として指定します。 プロシージャー内でパラメーターが設定されなければ、入力値が戻されます。
パラメーター名
SQL 変数として使用するパラメーターの名前を指定します。 この名前は、このプロシージャー・バージョンに対する他のどの parameter-name の名前とも同じにすることはできません。 このバージョンのプロシージャー内にあるパラメーター名は、このプロシージャーの他のバージョンにおいて対応するパラメーターの名前と異なっても構いません。
一体型
パラメーターのデータ・タイプを指定します。 データ型指定の詳細については、「CREATE PROCEDURE 文(SQL - ネイティブプロシージャ )」を参照してください。
型名明確
入力パラメーターのデータ・タイプは特殊タイプです。 パラメーターの長さ、 精度、位取り、サブタイプ、またはコード化スキームの各属性は、いずれも特殊タイプのソース・タイプの属性です。 特殊タイプは、LOB データ・タイプに基づくものであってはなりません。
配列タイプ名
入力パラメーターのデータ・タイプはユーザー定義配列タイプです。

スキーマ名を指定せずに array-type-name を指定すると、Db2は SQL パス内のスキーマを検索することによって配列タイプを解決します。

NOT DETERMINISTIC または DETERMINISTIC
プロシージャーが同じ IN 引数と INOUT 引数を指定して呼び出されるたびに、このプロシージャーが同じ結果を戻すかどうかを指定します。
NOT DETERMINISTIC
データベースで参照されるデータが変更されていない場合であっても、プロシージャーが同じ IN 引数と INOUT 引数を指定して呼び出されるたびに、このプロシージャーが同じ結果を戻さない可能性があります。

NOT DETERMINISTIC がデフォルトです。

DETERMINISTIC
データベース内で参照されるデータが変更されていなければ、プロシージャーが同じ IN 引数と INOUT 引数を指定して呼び出されるたびに、このプロシージャーは常に同じ結果を戻します。

Db2は、プロシージャー・コードが DETERMINISTIC または NOT DETERMINISTIC の指定と一致していることを検査しません。

MODIFIES SQL DATAREADS 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 PROCEDURE ステートメントを使用して、このオプションを ALLOW DEBUG MODE に変更できます。

DISABLE DEBUG MODE
このプロシージャー・バージョンがデバッグ・モードで実行できないことを指定します。

このプロシージャー・バージョンが DISABLE DEBUG MODE を使用するように作成、置き換え、または変更済みの後では、ALLOW DEBUG MODE または DISALLOW DEBUG MODE を指定するようにこのプロシージャーを変更できません。 DISABLE DEBUG MODE を指定するプロシージャー・バージョンの 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 は、この文節で指定されている値と同じでなければなりません。

この文節は、ルーチンのシステム生成パラメーターに使用される コード化スキームも指定します。

修飾子スキーマ名
プロシージャー本体で参照される非修飾オブジェクト名に使用される暗黙的な修飾子を指定します。 このオプションのデフォルト値がどのように決定されるかについては、「無修飾のエイリアス、インデックス、JARファイル、マスク、パーミッション、シーケンス、テーブル、トリガー、およびビュー名」 を参照してください。
パッケージオーナー の承認名

FL 500

変更の開始プロシージャー・バージョンに関連するパッケージ所有者を指定します。 デフォルトでは、プロセスがオブジェクト所有者属性および修飾子属性としてロールで定義されたトラステッド・コンテキストで実行されている場合、authorization-name はロールになります。 それ以外の場合、デフォルトはプロセスの SQL 許可 ID です。変更の終わり

この許可 ID には、ルーチンの本体に含まれる SQL ステートメントの実行に必要な特権がなければならず、必要なバインド特権が含まれていなければなりません。 PACKAGE OWNER オプションの値は、リモート・システムに送信時の変換対象です。

認証要件については、BINDパッケージサブコマンド(DSN)コマンドの 「認証」 セクションを参照してください。

変更の開始
AS ROLE
authorization-name が現行サーバーに存在するロールであることを指定します。
AS USER
authorization-name が許可 ID であることを指定します。
変更の終わり
ASUTIME
プロシージャーの 1 回の呼び出しで使用できるプロセッサー時間の合計量を、CPU サービス単位で指定します。 この値は、リソース限定表の ASUTIME 列とは無関係です。

プロシージャーのデバッグ時、この時間制限を設定すると、プロシージャーがループ状態になった時に役立ちます。 サービス・ユニットに関する情報は、 z/OS MVS 『Initialization and Tuning Guide(初期化およびチューニング・ガイド) 』を参照。

NO LIMIT
プロシージャーで実行可能な CPU サービス単位数に制限がないことを指定します。

NO LIMIT がデフォルトです。

LIMIT 整数
CPU サービス単位数の制限は、1 から 2147483647 までの範囲内の正の integer です。 プロシージャーが、指定された値より多くのサービス単位を使用する場合、Db2はプロシージャーを取り消します。 プロシージャーの並列タスクによって使用される CPU サイクルは、指定された ASUTIME LIMIT には提供されません。
COMMIT ON RETURN NOCOMMIT 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 タイプである配列エレメントで定義される配列タイプ

自律型プロシージャーが実行中であるときに、グローバル変数に値を割り当ててはなりません。

INHERIT SPECIAL REGISTERS または DEFAULT SPECIAL REGISTERS
ルーチンに入ったときに特殊レジスターを設定する方法を指定します。
INHERIT SPECIAL REGISTERS
特殊レジスタの値が継承されることを指定します。特殊レジスタの特性を表に記載した規則に従います。 特殊レジスタは、ユーザー定義関数またはストアドプロシージャの特殊レジスタに記載されています

INHERIT SPECIAL REGISTERS がデフォルトです。

DEFAULT SPECIAL REGISTERS
ユーザー定義関数またはストアド プロシージャ内の特殊レジスター のプロシージャー内の特殊レジスターの特性に関する表の規則に従って、特殊レジスターがデフォルト値に初期化されることを指定します。
デバッグモード用 WLM 環境
プロシージャーをデバッグするときにDb2が使用する WLM (ワークロード・マネージャー) アプリケーション環境を指定します。 WLM 環境の name は SQL ID です。

WLM ENVIRONMENT FOR DEBUG MODE が指定されていない場合、Db2はインストール時に指定されたデフォルトの WLM が確立したストアード・プロシージャーのアドレス・スペースを使用します。

DISABLE DEBUG MODE が有効な場合は、WLM ENVIRONMENT FOR DEBUG MODE 値は無視されます。

WLM アプリケーション環境に対して適切な権限を持っている必要があります。

DEFER PREPARE または NODEFER PREPARE
リモート・オブジェクトを参照する動的 SQL ステートメントの準備を保留するか、即時に準備するかを指定します。

このデフォルトは、REOPT オプションに対して指定した値により変わります。 REOPT NONE が指定されている場合、デフォルトは NODEFER PREPARE です。 それ以外の場合、DEFER PREPARE がデフォルトです。

DEFER PREPARE
リモート・オブジェクトを参照する動的 SQL ステートメントの準備を保留することを指定します。

分散処理に関する考慮事項については、 DEFERおよびNODEFERバインドオプションを参照してください。

NODEFER PREPARE
リモート・オブジェクトを参照する動的 SQL ステートメントの準備を保留しないことを指定します。
CURRENT DATA
カーソル固定の分離レベルが有効であるときに、読み取り専用カーソルおよび未確定カーソルに対してデータの現行性が必要であるかどうかを指定します。 CURRENT DATA は、分散の未確定カーソルに対してブロック・ フェッチが使用できるかどうかも判別します。 カーソルの現在の行、ブロックフェッチ、およびデータ通貨の更新の詳細については、「CURRENTDATAオプションの選択」 を参照してください。
はい
読み取り専用カーソルおよび未確定カーソルに対してデータの現行性が必要であることを指定します。 Db2 データの一貫性を確保するために、ページまたは行ロックを取得した。 ブロック・フェッチは、分散カーソル、未確定カーソルに対して使用できません。
いいえ
読み取り専用カーソルおよび未確定カーソルに対してデータの現行性が必要でないことを指定します。 ブロック・フェッチは、分散の未確定カーソルに対して使用できます。 未確定カーソルのオープン後、プロシージャーが その未確定カーソルに対して DELETE WHERE CURRENT OF ステートメントを動的に準備し実行しようとする場合は、CURRENT DATA(NO) を使用することはお勧めできません。 ご使用のプロシージャーが以下のいずれかのカーソルに対して DELETE WHERE CURRENT OF ステートメントを使おうとすると、負の SQLCODE を受け取ります。
  • ブロック・フェッチを使用しているカーソル
  • 照会並列処理を使用しているカーソル
  • このアプリケーション・プロセスまたは他のアプリケーション・プロセスで 修正される行に位置付けられたカーソル

「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 プロシージャーの実行時環境は、実行時における動的 SQL ステートメントの動きを制御します。 DYNAMICRULES 値と実行時環境の組み合わせにより、動的 SQL 属性の値が決定されます。 その属性値の集合が、動的 SQL ステートメントの振る舞いと呼ばれます。 次の値が指定可能です。
RUN
動的 SQL ステートメントが「実行動作」を使用して処理されることを指定します。

RUN がデフォルトです。

BIND
動的 SQL ステートメントが「バインド動作」を使用して処理されることを指定します。
DEFINEBIND
動的 SQL ステートメントが「定義動作」または「バインド動作」のいずれかを使用して処理されることを指定します。
DEFINERUN
動的 SQL ステートメントが「定義動作」または「実行動作」のいずれかを使用して処理されることを指定します。
INVOKEBIND
動的 SQL ステートメントが「呼び出し動作」または「バインド動作」のいずれかを使用して処理されることを指定します。
INVOKERUN
動的 SQL ステートメントが「呼び出し動作」または「実行動作」のいずれかを使用して処理されることを指定します。
これらのオプションの効果については、「認証ID」および「動的SQL」 を参照してください。
APPLICATION ENCODING SCHEME
プロシージャー本体内の静的 SQL ステートメントにある SQL 変数に対して、デフォルトのコード化スキームを指定します。 この値が使用されるのは、CCSID 文節がデータ・タイプの一部として無指定で、かつ PARAMETER CCSID ルーチン・オプションも無指定の場合に、コンパウンド・ステートメントで SQL 変数を定義するためです。
ASCII
サーバーの ASCII CCSID を使用して、データをエンコードすることを指定します。
EBCDIC
サーバーの EBCDIC CCSID を使用して、データをエンコードすることを指定します。
ユニコード
サーバーの Unicode CCSID を使用して、データをエンコードすることを指定します。

このオプションのデフォルト値がどのように決定されるかについては、ENCODING バインドオプションを参照してください。

WITH EXPLAIN または WITHOUT EXPLAIN
プロシージャー内の SQL ステートメントの実行方法について、情報を提供するかどうかを指定します。
WITHOUT EXPLAIN
プロシージャー内の SQL ステートメントの実行方法について、情報が提供されないことを指定します。

WITHOUT EXPLAIN を使って指定したネイティブ SQL プロシージャーに組み込まれたあるステートメントに対して、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) が付いた複数の別名を持つことができますが、スキーマ修飾子は異なります。ビューやシノニムにすることはできません。 この表は、この版が追加または置き換えられる前に存在しなければなりません。 owner.PLAN_TABLE へのすべての挿入に、QUERYNO の値は、Db2によって割り当てられたステートメント番号です。

また、WITH EXPLAIN オプションは、2 つのオプション表 DSN_STATEMNT_TABLE および DSN_FUNCTION_TABLE (もし存在すれば) にデータを追加します。 DSN_STATEMNT_TABLE には、SQL ステートメントの処理コストの見積値が含まれています。

EXPLAIN文の詳細については、WITH EXPLAINオプションで入力されるテーブルの説明も含めて、 EXPLAIN文を参照してください。

WITH IMMEDIATE WRITE または WITHOUT IMMEDIATE WRITE
グループ・バッファー・プールの従属ページ・セットまたは従属パーティションに行われる更新に対して、即時書き込みが実行されるかどうかを指定します。 このオプションは、データ共用環境にのみ適用されます。 IMMEDWRITE サブシステム・パラメーターにはこのオプションの影響はありません。 IMMEDWRITE バインドオプションは、実行時間に影響を与える IMMEDWRITE バインドオプションの暗黙的な階層構造(このプロシージャオプションに類似)を示します。
WITHOUT IMMEDIATE WRITE
通常の書き込みアクティビティーを行うように指定します。 グループ・バッファー・プールに従属している更新されたページは、フェーズ 1 コミット時点またはフェーズ 1 コミットの前、あるいは、ロールバックされているトランザクションのアボート終了後に書き込まれます。

WITHOUT IMMEDIATE WRITE がデフォルトです。

WITH IMMEDIATE WRITE
グループ・バッファー・プールに従属する更新ページが バッファーの更新完了後すぐに書き込まれることを指定します。 バッファーが、トランザクションのフォワード処理中、もしくはトランザクションのロールバック処理中に更新された場合であっても、更新されたページは即時に書き込まれます。 WITH IMMEDIATE WRITE はパフォーマンスに影響する可能性があります。
ISOLATION LEVEL RR、RS、CS、または UR
プロシージャーを、他の実行中のアプリケーションの影響からどの程度分離するかを指定します。 分離レベルに関する情報は、「RELEASEオプションの選択」 を参照してください。
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 ひもていすう
プロシージャー本体に含まれている静的 SQL ステートメントに対して、照会の最適化ヒントを使用するかどうかを指定します。

string-constant は長さが 128 バイトまでの文字ストリングです。これは、入力として使用する行を PLAN_TABLE で検索するときに、Db2サブシステムによって使用されます。 デフォルト値は空ストリングです。これは、Db2サブシステムが静的 SQL ステートメントに最適化のヒントを使用しないことを示します。

最適化ヒントを使用するのは、最適化ヒントがお客様のシステムで使用可能な場合に限ります。 詳細は、「OPTIMIZATION HINTS」フィールド(OPTHINTSサブシステム・パラメータ )を参照してください

SQL PATH
プロシージャーの本体の中で、Db2サブシステムが非修飾のユーザー定義タイプ、関数、およびプロシージャー名 (CALL ステートメント内) を解決するために使用する SQL パスを指定します。 デフォルト値は 「SYSIBM」、「SYSFUN」、「SYSPROC」、「SYSIBMADM 」、およびQUALIFIERオプションの値です。

SQL パスの最大長は、2048 バイトです。 Db2は、指定された各 schema-name を取得し末尾ブランクを除去し、その前後に 2 つの区切り文字を追加し、最後の各スキーマ名を除く各スキーマ名の後に 1 つコンマを追加して、長さを計算します。 その結果得られるストリングの長さが 2048 バイトを超えることはできません。

schema-name
スキーマを指定します。 Db2 ALTER文が処理される際に、指定されたスキーマが実際に存在することを検証しません。

SQL パスに SYSPUBLIC を指定することはできません。

スキーマ名リスト
スキーマ名のコンマ区切りリストを指定します。 同一スキーマ名が、スキーマ名のリストに複数回表示されることはありません。 指定できるスキーマ名の数は、結果の SQL パスの最大長で制限されます。

SQL パスに SYSPUBLIC を指定することはできません。

SYSTEM PATH
スキーマ名 「SYSIBM」、「SYSFUN」、「SYSPROC」、「SYSIBMADM」 を指定します。
SESSION_USER または USER
SESSION_USER (または USER) 特殊レジスターの値を指定します。 ALTER ステートメントの処理時、この実際の長さは、PATH オプションに対して指定したスキーマ名のリストの合計長に含まれます。 スキーマ名のリストで SESSION_USER (または USER) を指定する場合、SESSION_USER (または USER) キーワードの前後に区切り文字を使用しないでください。
RELEASE AT
プロシージャーが使用するリソースを解放する時点 (各コミット・ポイントまたはプロシージャーが終了するとき) を指定します。
COMMIT
リソースが各コミット・ポイントで解放されることを示します。

COMMIT がデフォルトです。

DEALLOCATE
リソースがプロシージャーの終了時点でのみで解放されることを示します。 DEALLOCATEは、クライアントシステムとのDRDA接続を通じて Db2 サーバー上で実行されるパッケージには影響しません。 DEALLOCATEは、動的SQL文にも影響を与えません。動的SQL文では常にRELEASE AT COMMITが使用されますが、次の例外があります。RELEASE AT DEALLOCATE節とWITH KEEP DYNAMIC節を使用し、サブシステムがインストールパネルでフィールドCACHE DYNAMIC SQLにYESの値でインストールされている場合( DSNTIP8 )、動的SELECT文とSQLデータ変更文ではRELEASE AT DEALLOCATEオプションが有効になります。

動的ステートメントのために獲得されたロックは、以下のいずれかのイベントが発生したユニットで保持されます。

  • アプリケーション・プロセスが終了する。
  • アプリケーション処理が、同じステートメント ID をもつ PREPARE ステートメントを発行する。 (ロックは次のコミット・ポイントで解除されます)。
  • その文は使用されていないため、動的な文キャッシュから削除されます。 (ロックは次のコミット・ポイントで解除されます)。
  • ステートメントが従属しているオブジェクトがドロップされるか変更される、もしくはステートメントが必要とする特権が取り消される。 (ロックは次のコミット・ポイントで解除されます)。

DEALLOCATE時のリリースは、パッケージに追加のアイテムが常駐するため、パッケージサイズが大きくなる可能性があります。

RELEASE句がロックと並行処理にどのように影響するかの詳細については、「RELEASEオプションの選択」 を参照してください。
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は照会を他の使用可能なアクセラレーター・サーバーに送信します。
REOPT
Db2が、SQL 変数または SQL パラメーター、パラメーター・マーカー、および特殊レジスターの値を使用して、実行時にアクセス・パスを決定するかどうかを指定します。
NONE
Db2が、SQL 変数または SQL パラメーター、パラメーター・マーカー、および特殊レジスターの値を使用して、実行時にアクセス・パスを判別しないことを指定します。

デフォルトは NONE です。

ALWAYS
Db2が、SQL ステートメントが実行されるたびに、実行時に常にアクセス・パスを決定することを指定します。
ONCE
Db2が、ステートメントが初めてオープンされたときに、動的 SQL ステートメントのアクセス・パスを一度だけ判別することを指定します。 このアクセス・パスは、準備済みのステートメントが無効化されるまで、 または動的ステートメント・キャッシュから除去されて再度準備する必要が生じるまで、使用されます。
VALIDATE RUN または VALIDATE BIND
バインド中または再バインド中に検出される「OBJECT not FOUND」および「NOT AUTHORIZED」のタイプのエラーを、実行時に再検査するかどうかを指定します。 オブジェクトおよび必要な特権がすべて存在する場合、このオプションは効果がありません。
VALIDATE RUN
ALTER PROCEDURE ステートメントの処理時に必要なオブジェクトまたは特権が存在しない場合、警告メッセージは戻すが、ALTER PROCEDURE ステートメントの処理は続行させることを指定します。 Db2サブシステムは、ALTER PROCEDURE ステートメントの処理中に検査に失敗した SQL ステートメントについて、実行時にオブジェクトおよび特権を再検査します。 この許可により、プロシージャー・パッケージの所有者の許可 ID の使用がチェックされます。

VALIDATE RUN がデフォルトです。

VALIDATE BIND
ALTER PROCEDURE ステートメントの処理時に必要なオブジェクトまたは特権が存在しない場合、エラーが出されて、ALTER PROCEDURE ステートメントは失敗に終わることを指定します。
ROUNDING
DECFLOAT データの操作に対して丸めモードを指定します。
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 CLAUSE REQUIRED
位置指定更新を行うためにカーソルを使用する場合、FOR UPDATE 文節をカーソル定義の一部として指定する必要があることを指定します。

FOR UPDATE CLAUSE REQUIRED がデフォルトです。

FOR UPDATE CLAUSE OPTIONAL
位置指定更新にカーソルを使用する場合に、FOR UPDATE 文節は指定する必要がないことを示します。 プロシージャー本体には、 ユーザーに対して更新許可された列の更新を行う、位置指定 UPDATE ステートメントを含めることができます。

プロシージャーに対して結果となる DBRM が非常に大きくなる場合、FOR UPDATE CLAUSE OPTIONAL 指定時に特別なストレージが必要なる可能性があります。

列リストのない select-statement の FOR UPDATE 文節は、静的または動的 SQL ステートメントに適用されます。 列リストを使用する select-statement の FOR 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-level
プロシージャー本体内の SQL ステートメントのアプリケーション互換性動作を指定します。 このオプションが指定されていない場合、動作は、パッケージの前のバインドの applcompat-level (存在する場合)、または APPLCOMPAT サブシステム・パラメーターによって決定されます。
次の applcompat-level の値を指定できます
変更の開始V13R1M5nn変更の終わり
変更の開始特定された Db2 13 機能レベルの動作との互換性。 例えば、 V13R1M508 は、 Db2 13 で利用可能な最も高いファンクション・レベルとの互換性を指定する。 同等以上の機能レベルを活動化する必要があります。

変更の開始各アプリケーション互換性レベルで使用可能になる新機能については、 V13R1Mnnn アプリケーション互換性レベルを参照してください。変更の終わり

変更の終わり
V12R1M5nn

識別された Db2 12 機能レベルの動作との互換性。

変更の開始各アプリケーション互換性レベルで使用可能になる新機能については、 V12R1Mnnn アプリケーション互換性レベルを参照してください。変更の終わり

ヒント: 変更の開始 Db2 for z/OS にアクセスするためにデータサーバークライアントまたはドライバを使用するアプリケーションの互換性レベルを上げるために、余分なプログラム準備ステップが必要になる場合があります。 詳細については、 データサーバークライアントとドライバのアプリケーション互換性レベルの設定を参照してください。変更の終わり
V12R1
Db2 12 機能レベル 500 の動作との互換性。 この値は、 V12R1M500 を指定した場合と同じ結果になります。
V11R1
Db2 11 新機能モードの動作との互換性。
V10R1
DB2 10 新機能モードの動作との互換性。 詳細については、 V10R1 アプリケーションの互換性レベルを参照してください。
CONCENTRATE STATEMENTS OFF または CONCENTRATE STATEMENTS WITH LITERALS
リテラル定数を指定するルーチンの動的 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 がプロシージャー本体の中で唯一のステートメントである場合は、そのステートメントをセミコロンで終了してはなりません。

ALTER PROCEDURE(SQL - ネイティブ)に関する注釈

手順のバージョンを変更する際の考慮事項
プロシージャーのバージョンを変更するには、ALTER PROCEDURE ステートメント実行時に有効状態にある環境設定は、CREATE PROCEDURE ステートメントまたは ALTER PROCEDURE ステートメント (以下のオプションのいずれかを指定) を使用してそのバージョンのプロシージャーを初めて作成するときに有効状態にあった環境設定と同一にする必要があります。
  • QUALIFIER
  • PACKAGE OWNER
  • OPTHINT
  • SQL PATH
  • DECIMAL (値にカンマが含まれている場合)

WLM FOR DEBUG MODE 節の場合、指定される名前は、オブジェクトまたはバージョンを定義した元のステートメントの CCSID で表現可能でなければなりません。

ネイティブSQLプロシージャに変更する
外部 SQL プロシージャーをネイティブ SQL プロシージャーに変更することはできません。 変更対象の外部プロシージャーをドロップすることができます。これを行うには、DROP ステートメントを使用し、CREATE PROCEDURE ステートメントを使用して同様の定義を持つネイティブ SQL プロシージャーを作成します。 あるいは、別のスキーマを使用してネイティブ SQL プロシージャーを作成することができます。
ID 解決
ネイティブSQLプロシージャの名前が列、SQL変数、またはSQLルーチンに解決される方法については、 SQLプロシージャ言語(SQL PL) を参照してください。 外部 SQL プロシージャーの場合、ネーム解決は変更ありません。

列、SQL 変数およびパラメーターに対して重複する名前を 使用する場合、列については表指定子、パラメーターにはプロシージャー名、そして SQL 変数にはラベル名を使用して、それらの重複名を修飾してください。

プロシージャのバージョンに対して生成されるパッケージの特徴
プロシージャーの 1 バージョンに関連付けられるパッケージは、以下のように命名されます。
  • location は、CURRENT SERVER 特殊レジスターの値に設定されます。
  • このパッケージ用の collection-id (スキーマ) はこのプロシージャーのスキーマ修飾子と同じです。
  • package-id は、プロシージャーの固有名と同じです。
  • version-id は、プロシージャーの初期バージョン用のバージョン ID と同じです。

パッケージは、暗黙的または明示的に指定されたプロシージャー・オプションに対応するバインド・オプションを使用して生成されます。 対応するバインド・オプション以外に、パッケージは以下のバインド・オプションを使用して生成されます。

  • dbプロトカル(drda)
  • FLAG(1)
  • SQLERROR(NOPACKAGE)
  • イネーブル(*)
プロシージャー・オブジェクトのアプリケーション互換性レベルの考慮事項
アプリケーション互換性レベルは、新機能および機能拡張の採用と使用を制御します。 オブジェクトが作成または変更されると、2 つの別個のアプリケーション互換性レベルが使用されます。1 つはオブジェクトの定義を処理するために使用され、もう 1 つはオブジェクト本体内の SQL ステートメントを処理するために使用されます。
オブジェクト定義

CURRENT APPLICATION COMPATIBILITY 特殊レジスター値は、オブジェクト本体内のステートメントを除き、オブジェクト定義を処理するために使用されます

このアプリケーション互換性レベルは、SYSENVIRONMENT.APPLCOMPAT 列に保管されます。 オブジェクトのカタログ定義内の環境 ID 値を使用して、ENVID 値が一致する SYSENVIRONMENT 行を見つけることができます。

このアプリケーション互換性レベルは、オブジェクトの再生成時に変更できます。

オブジェクト本体内のステートメント

CREATE または ALTER ステートメントの APPLCOMPAT オプションで暗黙的または明示的に指定されたアプリケーション互換性レベルは、オブジェクト本体のステートメントを処理するために使用されます。

このアプリケーション互換性レベルは、オブジェクト定義に関連付けられたパッケージの SYSPACKAGE.APPLCOMPAT 列に保管されます。

現行の定義より下位のアプリケーション互換性レベルを使用してプロシージャー定義を変更する
CURRENT APPLICATION COMPATIBILITY 特殊レジスター値が既存のオブジェクト定義のアプリケーション互換性レベルより低い場合、ALTER ステートメントの内容が現行レベルで有効であっても、オブジェクトを変更するとエラーが発生する可能性があります。 このエラーは、CURRENT APPLICATION COMPATIBILITY 特殊レジスター設定より高いレベルを必要とする機能が既存のオブジェクト定義に含まれている場合に発生する可能性があります。
再生成プロシージャー・オブジェクトのアプリケーション互換性レベル

オブジェクトを再生成する ALTER ステートメントの場合、オブジェクト定義は、REGENERATE キーワードに続く USING APPLICATION COMPATIBILITY 節によって暗黙的または明示的に指定されたアプリケーション互換性設定を使用して再処理されます。 このアプリケーション互換性の値は、オブジェクト定義に関連付けられた環境設定の SYSENVIRONMENT.APPLCOMPAT 列の既存の値を置き換えます。

USING APPLICATION COMPATIBILITY 節が指定されていない場合、オブジェクト定義に関連付けられたテキストを再処理するために、オブジェクト定義の SYSENVIRONMENT.APPLCOMPAT 列内の既存のアプリケーション互換性値が使用されます。

本体内のステートメントの動作は、オブジェクトの既存の APPLCOMPAT オプションの値によって制御されます。

TABLE LIKE name AS LOCATOR句を使用して定義されたプロシージャに関する考慮事項
プロシージャがテーブルパラメータ( TABLE LIKE 名前 AS LOCATOR 句が CREATE PROCEDURE ステートメントで指定され、入力パラメータの 1 つが遷移テーブルであることを示す場合、変更にパラメータ リストの指定が必要な場合は、ALTER PROCERDURE ステートメントを使用してプロシージャを変更することはできません。 例えば、ネイティブ SQL プロシージャーのバージョンを追加または置き換えるには、プロシージャーをドロップして再作成する必要があります。
SQLプロセッサプログラムの考慮事項
SPUFI、 Db2 command line processor、 DSNTEP2 などのSQLプロセッサプログラムでは、ルーチン本体でセミコロンで終わるSQLステートメントが正しく解析されない場合があります。 これらのプロセッサー・プログラムは、複数の SQL ステートメント (各ステートメントは終了文字で分離されている) を入力として受け入れます。 セミコロンをSQL文の終端記号として使用するプロセッサプログラムでは、セミコロンが埋め込まれたCREATE FUNCTION文が切り捨てられ、その一部のみが Db2 に渡される可能性があります。 そのため、これらのプロセッサー・プログラムの場合は、SQL 終了文字の変更が必要に なる可能性があります。 SPUFI および DSNTEP2 の終了文字を変更する方法については、 SPUFI 入力データ セットでの SQL 終了文字の設定および DSNTEP2 および DSNTEP4 サンプル プログラムを参照してください。
バインド・オプションに対するプロシージャー・オプションの対応

以下の表は、特定のCREATE PROCEDUREおよびALTER PROCEDUREオプションに対応するbindコマンドオプションをまとめたものです。 バインドオプションの詳細については、「パッケージ、プラン、サービスのBINDおよびREBINDオプション」 を参照してください。

バインド・オプションに対するプロシージャー・オプションの対応
CREATE PROCEDURE または ALTER PROCEDURE オプション バインド・コマンド・オプション
ACCELERATION WAITFORDATA nnnn.m ACCELERATIONWAITFORDATA(nnnn.m)
ACCELERATOR accelerator-name ACCELERATOR(accelerator-name)
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)
パッケージの無効化
このステートメントは、指定された文節とキーワード、およびその他の要因に応じて、ターゲット・オブジェクトに依存するすべてのパッケージを無効にする可能性があり、カスケード効果によって他の関連オブジェクトを無効にする場合があります。

変更の開始ACTIVATE VERSIONオプションを指定したALTER PROCEDUREは、以前のバージョンのプロシージャに依存しているすべてのパッケージを無効にします。 ( routine-version-id の値がプロシージャの現在のアクティブバージョンと同じであれば、 ACTIVATE VERSIONはパッケージを無効にしない)。変更の終わり

SQL プロシージャーのバージョンを変更して、アクティブなバージョンに指定されている特定のオプションを変更すると、そのプロシージャーを参照するすべてのアプリケーション・パッケージが無効としてマークされ、それらのパッケージを呼び出すには再バインドが必要です。 これには、プロシージャーの暗黙の再生成をもたらす特定のバインド・オプションおよびルーチン・オプションに対する変更が含まれます。 これらのオプションは、次の表の「変更には呼び出し元のアプリケーションの再バインドが必要」および「変更により、プロセス全体が暗黙的に再生成される」列に適宜マークされています。 詳細は、「パッケージが無効になる変更 」を参照してください。

暗黙の再バインドおよび再生成
ネイティブ SQL プロシージャーの特定の属性が変更されると、プロシージャーの本体が再バインドまたは再生成される可能性があります。 次の表の「変更により、プロセス全体が暗黙的に再生成される」および「変更により、プロシージャ本体の非制御ステートメントが暗黙的に再バインドされる」列は、特定のオプションが変更されたときに暗黙的な再バインドと再生成が発生した場合の要約です。
表 1. 変更時に再バインドまたは再生成が起こることになる CREATE PROCEDURE と ALTER PROCEDURE オプション。
CREATE PROCEDURE または ALTER PROCEDURE オプション 変更により、呼び出し側アプリケーションの再バインドが必要になりますか? 変更により、プロシージャー本体の非制御ステートメントの暗黙的再バインドが起こる結果となりますか? 変更により、プロシージャー本体の全体の暗黙的な再生成が起こる結果となりますか?
ACCELERATION WAITFORDATA いいえ はい いいえ
ACCELERATOR いいえ はい いいえ
ALLOW DEBUG MODE、DISALLOW DEBUG MODE、 または DISABLE DEBUG MODE はい1, 2 はい1 はい
APPLICATION ENCODING SCHEME はい はい はい
ARCHIVE SENSITIVE はい はい はい
ASUTIME はい いいえ いいえ
BUSINESS_TIME SENSITIVE はい はい はい
COMMIT ON RETURN はい いいえ いいえ
CURRENT DATA いいえ はい いいえ
DATE FORMAT はい はい はい
DECIMAL はい はい はい
DEFER PREPARE または NODEFER PREPARE いいえ はい いいえ
DEGREE いいえ はい いいえ
DYNAMIC RESULT SETS はい いいえ いいえ
DYNAMICRULES いいえ はい いいえ
FOR UPDATE CLAUSE OPTIONAL または FOR UPDATE CLAUSE REQUIRED はい はい はい
GET_ACCEL_ARCHIVE はい はい はい
INHERIT SPECIAL REGISTERS または DEFAULT SPECIAL REGISTERS はい いいえ いいえ
ISOLATION LEVEL いいえ はい いいえ
MODIFIES SQL DATA、READS SQL DATA、または CONTAINS SQL はい はい はい
NOT DETERMINISTIC または DETERMINISTIC いいえ いいえ いいえ
OPTHINT いいえ はい いいえ
PACKAGE OWNER いいえ はい いいえ
QUALIFIER いいえ はい いいえ
QUERYACCELERATION はい はい はい
コミット時にリリースまたはデアロケート時にリリース いいえ はい いいえ
REOPT いいえ はい いいえ
SQL PATH いいえ はい いいえ
STOP AFTER SYSTEM DEFAULT FAILURES、STOP AFTER nn FAILURES、 または CONTINUE AFTER FAILURES はい いいえ いいえ
SYSTEM_TIME SENSITIVE はい はい はい
TIME FORMAT はい はい はい
VALIDATE RUN または VALIDATE BIND いいえ はい いいえ
WITH EXPLAIN または WITHOUT EXPLAIN いいえ はい いいえ
WITH IMMEDIATE WRITE または WITHOUT IMMEDIATE WRITE いいえ はい いいえ
WITH KEEP DYNAMIC または WITHOUT KEEP DYNAMIC いいえ はい いいえ
WLM ENVIRONMENT FOR DEBUG MODE はい いいえ いいえ
注:
  1. ALLOW DEBUG MODE の値を DISALLOW DEBUG MODE に変更すると、プロシージャー・パッケージは再バインドまたは再生成されます。
  2. DISALLOW DEBUG MODE を DISABLE DEBUG MODE に変更すると、呼び出し側アプリケーションは無効化されます。
SYSENVIRONMENTSカタログテーブルの考慮事項
新環境の設定を指定した ALTER ステートメントは、新規の行が SYSENVIRONMENTS カタログ表に追加される結果となります。 この新規の行は、ALTER ステートメントの処理時にエラーが検出されたとしても、追加されることになります。 このようにして、新規の SYSENVIRONMENTS 行は、失敗する ALTER ステートメントに対してでさえも、追加されます。
互換性:
前のバージョンのDb2との互換性を得るために、以下のオプションのいずれかが option-list の一部として暗黙的または明示的に指定されている場合、警告が出されますが、ステートメントは実行されます。 ただし、REPLACE または ADD VERSION が以下のオプションのいずれかで指定されると、エラーが出され、そのステートメントは実行されません。 例えば、ADD VERSION および STAY RESIDENT を指定すると、エラーが出されます。
  • STAY RESIDENT
  • PROGRAM TYPE
  • RUN OPTIONS
  • NO DBINFO
  • COLLID または NOCOLLID
  • セキュリティー
  • PARAMETER STYLE GENERAL WITH NULLS
  • STOP AFTER SYSTEM DEFAULT FAILURES
  • nn回失敗したら停止する
  • CONTINUE AFTER FAILURES

ネイティブ SQL プロシージャーに対して WLM ENVIRONMENT を指定する場合、WLM ENVIRONMENT FOR DEBUG MODE を指定する必要があります。

CREATE PROCEDURE ステートメントとの互換性のために、以下の文節は使用可能ですが、無視されます。

  • LANGUAGE SQL
難読化された手順の変更
難読化されたプロシージャーは、どのような方法でも変更できません。
代替構文およびシノニム:
Db2ファミリー内のDb2または他の製品の以前のリリースとの互換性を提供するために、Db2は以下のキーワードをサポートします。
  • RESULT SET、RESULT SETS、DYNAMIC RESULT SETを同義語として DYNAMIC RESULT SETS
  • VARIANTの同義語としての NOT DETERMINISTIC
  • NOT VARIANTは、同義語として DETERMINISTIC
ルーチン定義のカタログコメントに関する考慮事項
関数定義が置き換えられた場合、定義のカタログ内の既存のコメントはすべて削除され、関数定義が再生成された場合、定義のカタログ内の既存のコメントはすべて保持されます。

ALTER PROCEDURE の例(SQL - ネイティブ)

例 1
以下のステートメントは、UPDATE_SALARY_1 ネイティブ SQL プロシージャーのアクティブ・バージョンの既存のプロシージャー・オプションを変更します。 別バージョンのプロシージャーを変更する必要がある場合は、ACTIVE VERSION の代わりに VERSION routine-version-id を指定します。 バージョン指定の前にある ALTER 文節は省略可能であることに注意してください。
ALTER PROCEDURE UPDATE_SALARY_1
      ALTER ACTIVE VERSION
      NOT DETERMINISTIC
      CALLED ON NULL INPUT
      ALLOW DEBUG MODE
      ASUTIME LIMIT 10
例 2
プロシージャーの既存のバージョンのプロシージャー本体を変更するには、REPLACE 文節を使用する必要があります。 以下のステートメントを使って、プロシージャー本体と、バージョン V2 の UPDATE_SALARY_1 SQL プロシージャー用の既存 SQL データ・アクセス・オプションの両方を変更します。 このリストに何も変更を加えなくても、パラメーターのリストが指定されることに注意してください。 既存バージョンのプロシージャーを置き換える場合、指定する必要があるのは、パラメーター・リスト、非デフォルト値を持つことになるすべてのオプション (置き換え対象プロシージャーのバージョンにそれらのオプションが指定されていても)、およびプロシージャー本体です。
ALTER PROCEDURE UPDATE_SALARY_1
      REPLACE VERSION V2 (P1 INTEGER, P2 CHAR(5))
      MODIFIES SQL DATA
      UPDATE EMP SET SALARY = SALARY * RATE
            WHERE EMPNO = EMPLOYEE_NUMBER;
例 3
既存のプロシージャーの新規バージョンを追加するには、ADD VERSION 文節を使用する必要があります。 以下のステートメントを使用して、より高い給与増を適用するための UPDATE_SALARY_1 プロシージャーの新規バージョンを追加します。 たとえ、新規バージョンのプロシージャーが既存バージョンのプロシージャーと同じパラメーターを使用している場合でも、このパラメーター・リストを指定することに注意してください。 新規バージョンのプロシージャーを追加するには、指定する必要があるのは、パラメーター・リスト、非デフォルト値を持つことになるすべてのオプション、およびプロシージャー本体です。
ALTER PROCEDURE UPDATE_SALARY_1
      ADD VERSION V3 (P1 INTEGER, P2 CHAR(5))
        UPDATE EMP SET SALARY = SALARY * (RATE*10)
            WHERE EMPNO = EMPLOYEE_NUMBER;
例 4
例 3 のように、プロシージャーの新規バージョンが定義されている場合、以下の例のように、プロシージャーの新規バージョンを現在アクティブ・バージョンにすると、ACTIVATE VERSION 文節指定の ALTER PROCEDURE ステートメントを使用する必要があります。
ALTER PROCEDURE UPDATE_SALARY_1
      ACTIVATE VERSION V3;
例 5
現行アクティブ・バージョンのプロシージャーを再生成するには、以下のステートメントを使用します。
ALTER PROCEDURE UPDATE_SALARY_1
      REGENERATE ACTIVE VERSION;