CREATE FUNCTION 文(コンパイルされた SQL スカラー関数)

CREATE FUNCTION (コンパイル済み SQL スカラー) ステートメントは、コンパイル済み SQL スカラー関数を現行サーバーで定義し、その関数のソース・ステートメントを指定します。 この関数の本体は、SQL プロシージャー型言語でコーディングされています。 関数は、呼び出されるたびに単一の値を戻します。

コンパイル済み SQL スカラー関数には、パッケージが作成されます。

コンパイル済み SQL スカラー関数でない場合は、複数バージョンの関数を定義できます。 CREATE FUNCTION (コンパイル済み SQL スカラー) を使用して初期バージョンを定義し、ALTER FUNCTION を使用して後続バージョンを定義します。 SQL関数でサポートされているSQLステートメントについては、 SQLプロシージャステートメント(SQL PL) を参照してください。

CREATE FUNCTION(コンパイルされたSQLスカラー)の呼び出し

コンパイル済み SQL 関数の場合、このステートメントは動的に準備することのみが可能ですが、DYNAMICRULES 実行動作を暗 黙的または明示的に指定する必要があります。

CREATE FUNCTION(コンパイルされたSQLスカラー)の権限

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

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

スキーマ名と一致する許可 ID には、暗黙的にそのスキーマの CREATEIN 特権があります。

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

SQLルーチン・ボディを持つ関数を作成するには、権限セットに、インストール・パネルDSNTIPPのBIND NEW PACKAGEフィールドの値に応じて、新しいパッケージまたは既存のパッケージの新しいバージョンを追加するために必要な権限が含まれているか、権限セットにSYSADM、SYSCTRL、またはシステムDBADM権限が含まれている必要があります。 パッケージの所有者は、 SQL-ルーチン本体の文の実行に必要な権限を持っていなければならない。

パラメータのデータ型としてユーザー定義型を参照する場合、権限セットには以下の権限または権限の少なくとも1つも含まれていなければならない:

  • ユーザー定義タイプの所有権
  • ユーザー定義タイプに対する USAGE 特権
  • システム DBADM 権限
  • DATAACCESS 権限
  • SYSADM 権限

関数がパラメーターとして表を使用する場合、特権セットには、以下のうち少なくとも 1 つの特権も含まれている必要があります。

  • 表の所有権
  • 表に対する SELECT 特権
  • DATAACCESS 権限
  • SYSADM 権限

関数定義の内容によっては、 SYSDUMMYx テーブルで追加の認証が必要な場合がある。 SYSDUMMYx 表を参照してください。

特権セット:

アプリケーション・プログラムにこの ステートメントを組み込む場合、特権セットは、プランまたはパッケージの所有者が持つ特権となります。 パッケージ所有者が役割である場合、暗黙的なスキーマの一致は適用されず、このロールには、前にリストされた条件のいずれかを含める必要があります。

このステートメントが動的に準備され、かつ、ROLE AS OBJECT OWNER 文節が指定されたトラステッド・コンテキストの中で実行されていない場合、この特権セットは、プロセスの SQL 許可 ID が持つ特権のセットとなります。 スキーマ名がプロセスの SQL 許可 ID と異なる場合、下記の条件のいずれか 1 つが満たされていなければなりません。

  • 特権セットに SYSADM または SYSCTRL 権限が含まれている。
  • プロセスの SQL 許可 ID に、スキーマの CREATEIN 特権がある。
変更の開始FL 500 ロールをオブジェクト所有者として使用するように定義されたトラステッド コンテキストで CREATE FUNCTION が発行され、所有者のタイプが指定されていない場合、デフォルトのパッケージ所有者は次のように決定されます。
  • PACKAGE OWNER オプションが指定されていない場合は、ユーザーに関連付けられているロールがパッケージ所有者になります。
  • PACKAGE OWNER オプションが指定されている場合は、PACKAGE OWNER オプションで指定されたロールがパッケージ所有者になります。 トラステッド・コンテキストでは、指定された PACKAGE OWNER はロールである必要があります。
変更の終わり

WLM環境のデバッグモードの節を指定すると、 RACF® または外部セキュリティ製品が起動され、WLM環境でプログラムを定義するために必要な権限がチェックされます。 WLM 環境アクセスが RACF で保護されている場合、特権セットには必要な権限が含まれている必要があります。

SECURED オプションを指定する場合は、以下の追加特権の少なくとも 1 つが必要です。

  • SECADM 権限
  • CREATE_SECURE_OBJECT 特権

CREATE FUNCTION(コンパイルされたSQLスカラー)の構文

構文図を読むビジュアルシンタックスダイアグラムをスキップするCREATE FUNCTIONfunction-name( ,parameter-declaration )function-definitionWRAPPED難読化されたステートメントのテキスト

parameter-declaration:

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

parameter-type:

構文図を読むビジュアルシンタックスダイアグラムをスキップするData-typeTABLE LIKEtable-nameview-nameAS LOCATOR

データ・タイプ:

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

built-in-type:

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

関数定義:

構文図を読むビジュアルシンタックスダイアグラムをスキップする RETURNSdata-type2VERSION V1VERSIONroutine-version-idoption-listSQL-routine-body

SQL-routine-body:

構文図を読むビジュアルシンタックスダイアグラムをスキップするSQL 制御ステートメント

option-list: (option-list 内の各オプションは任意の順序で指定できますが、指定できるのはそれぞれ 1 回のみです)

構文図を読むビジュアルシンタックスダイアグラムをスキップする LANGUAGE SQL SPECIFICspecific-name NOT DETERMINISTICDETERMINISTIC EXTERNAL ACTIONNO EXTERNAL ACTION READS SQL DATACONTAINS SQLMODIFIES SQL DATA CALLED ON NULL INPUTRETURNS NULL ON NULL INPUT STATIC DISPATCH ALLOW PARALLELDISALLOW PARALLEL DISALLOW DEBUG MODEALLOW DEBUG MODEDISABLE DEBUG MODE PARAMETER CCSID ASCIIPARAMETER CCSID EBCDICPARAMETER CCSID UNICODE QUALIFIERschema-name PACKAGE OWNERauthorization-nameASROLEUSER ASUTIME NO LIMITASUTIME LIMIT整数 INHERIT SPECIAL REGISTERSDEFAULT SPECIAL REGISTERS WLM ENVIRONMENT FOR DEBUG MODE名前 CURRENT DATA NOCURRENT DATA YES DEGREE 1DEGREE ANY CONCURRENT ACCESS RESOLUTIONUSE CURRENTLY COMMITTEDCONCURRENT ACCESS RESOLUTIONWAIT FOR OUTCOME DYNAMICRULES RUNDYNAMICRULES BINDDYNAMICRULES DEFINEBINDDYNAMICRULES DEFINERUNDYNAMICRULES INVOKEBINDDYNAMICRULES INVOKERUN APPLICATION ENCODING SCHEME ASCIIAPPLICATION ENCODING SCHEME EBCDICAPPLICATION ENCODING SCHEME UNICODE WITHOUT EXPLAINWITH EXPLAIN WITHOUT IMMEDIATE WRITEWITH IMMEDIATE WRITE ISOLATION LEVEL CSISOLATION LEVEL RSISOLATION LEVEL RRISOLATION LEVEL UR OPTHINT''OPTHINTひもていすう QUERY ACCELERATION NONEQUERY ACCELERATION ENABLEQUERY ACCELERATION ENABLE WITH FAILBACKQUERY ACCELERATION ELIGIBLEQUERY ACCELERATION ALLGET_ACCEL_ARCHIVE NOGET_ACCEL_ARCHIVE YESACCELERATION WAITFORDATAnnnn.mACCELERATORaccelerator-name SQL PATH,schema-nameSYSTEM PATHSESSION USERUSER REOPT NONEREOPT ALWAYSREOPT ONCE VALIDATE RUNVALIDATE BIND ROUNDING DEC_ROUND_CEILINGROUNDING DEC_ROUND_DOWNROUNDING DEC_ROUND_FLOORROUNDING DEC_ROUND_HALF_DOWNROUNDING DEC_ROUND_HALF_EVENROUNDING DEC_ROUND_HALF_UPROUNDING DEC_ROUND_UP DATE FORMAT ISODATE FORMAT EURDATE FORMAT USADATE FORMAT JISDATE FORMAT LOCAL DECIMAL(15)DECIMAL(31)DECIMAL(15, s)DECIMAL(31, s) FOR UPDATE CLAUSE REQUIREDFOR UPDATE CLAUSE OPTIONAL TIME FORMAT ISOTIME FORMAT EURTIME FORMAT USATIME FORMAT JISTIME FORMAT LOCAL NOT SECUREDSECURED BUSINESS_TIME SENSITIVEYESBUSINESS_TIME SENSITIVENOSYSTEM_TIME SENSITIVEYESSYSTEM_TIME SENSITIVENOARCHIVE SENSITIVEYESARCHIVE SENSITIVENOAPPLCOMPATアップコンパトレベルCONCENTRATE STATEMENTS OFFCONCENTRATE STATEMENTS WITH LITERALS

CREATE FUNCTION(コンパイルされたSQLスカラー)の説明

関数名
関数の名前を指定します。 関数名が指定されたシグネチャで既に存在する場合、 関数名で指定された関数の既存のバージョン識別子と異なるルーチンバージョンID をVERSIONで指定しても、エラーが返されます。 詳細については、 「CREATE FUNCTION ステートメント (概要)」「スキーマ名と関数名の選択」 および 「スキーマ内の関数の一意性の決定」を参照してください。
(パラメータ宣言、…)

関数の入力パラメーターの数と名前と各パラメーターのデータ・タイプを指定します。 各 parameter-declaration は、関数の入力パラメーターを指定します。 入力パラメーターは、関数の中にいくつ指定しても かまいません。 関数が受け取ると予期しているパラメーターには、それぞれリスト内に 1 個の項目 が必要です。 関数のパラメーターはすべて入力パラメーターで、NULL 可能です。 関数に 30 個を超えるパラメーターが指定されている場合、最初の 30 個のパラメーターだけが、関数が固有であるかどうかの判別に使用されます。

パラメーター名
入力パラメーターの名前を指定します。 この名前は SQL ID で、 パラメーター・リスト内のそれぞれの名前は他のどの名前とも同じであってはなりません。
データ・タイプ
入力パラメーターのデータ・タイプを指定します。 データ・タイプは、組み込みデータ・タイプまたはユーザー定義タイプにすることができます。
一体型
入力パラメーターのデータ・タイプは組み込みデータ・タイプです。 組み込みデータ型の説明については、 CREATE TABLE文の built-in-typeデータ型と説明を参照してください。

文字データ・タイプまたはグラフィック・データ・タイプのパラメーターの場合は、PARAMETER CCSID 文節または CCSID 文節によってパラメーターのコード化スキームを指定します。 これらの文節をいずれも指定しない場合、コード化スキームはインストール・パネル DSNTIPF の DEF ENCODING SCHEME フィールドの値です。

型名明確
入力パラメーターのデータ・タイプは特殊タイプです。 パラメーターの長さ、 精度、位取り、サブタイプ、またはコード化スキームの各属性は、いずれも特殊タイプのソース・タイプの属性です。 特殊タイプは、LOB データ・タイプに基づくものであってはなりません。

スキーマ名を指定せずに特殊タイプの名前を指定すると、Db2は SQL パス内のスキーマを検索することによって、特殊タイプを解決します。

TABLE LIKE テーブル名 AS LOCATOR
パラメーターが遷移表であることを指定します。 ただし、 関数が呼び出されるときには、遷移表の実際の値は関数に渡されません。 代わり に 1 つの値が渡されます。 この値は表のロケーターであり、関数はこれを使用して遷移表の列にアクセスします。 指定された表には XML 列を含めることができますが、関数がこれらの XML 列を参照することはできません。

表パラメーターを 使用する関数は、トリガーのトリガー・アクションだけから呼び出すことができます。

配列タイプ名
入力パラメーターのデータ・タイプはユーザー定義配列タイプです。

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

文字ストリングまたはグラフィック・ストリング・データ・タイプのすべてのパラメーターの暗黙的または明示的に指定されたコード化スキームは、同じ (すべてが ASCII か EBCDIC か UNICODE) でなければなりません。

文字データ・タイプのパラメーターにはサブタイプ (BIT、SBCS、または MIXED) が 暗黙的または明示的に指定されていますが、関数プログラムは任意のサブタイプの 文字データを受け取ることができます。 したがって、関数が呼び出されると、入力データからパラメーターのサブタイプへの変換が起こる場合があります。 実際に DBCS 文字を含む混合データを SBCS サブタイプで宣言されている入力パラメーターの値に使用すると、エラーが起こります。

日時データ・タイプまたは特殊タイプのパラメーターは、異なるデータ・タイプとして 関数に渡されます。

  • 日時タイプ・パラメーターは文字データ・タイプとして渡され、データは ISO 形式 で渡されます。

    日時タイプ・パラメーターのコード化スキームは、任意の文字ストリングまたはグラフィック・ストリング・パラメーターの暗黙的または明示的に指定されたコード化スキームと同じです。 文字またはグラフィック・ストリング・パラメーターが渡されない場合、コード化スキームは、 インストール・パネル DSNTIPF の DEF ENCODING SCHEME フィールドの値になります。

  • 特殊タイプのパラメーターは、特殊タイプのソース・タイプとして受け渡されます。
RETURNS
関数の出力を指定します。
data-type2
出力のデータ・タイプを指定します。 出力は NULL 可能です。

入力パラメータのデータタイプに適用されるのと同じ考慮事項が、 データタイプで説明されているように、関数の出力のデータタイプにも適用されます。

VERSION ルーチンバージョンID
生成対象の関数の最初のバージョンに対するバージョン ID を指定します。 ADD VERSION 文節指定の ALTER FUNCTION ステートメント、または BIND DEPLOY コマンドを使用して、関数の追加バージョンを作成できます。
routine-version-id
ルーチンのバージョンを指定する最大 64 EBCDIC バイトの SQL ID。 ID の UTF-8 表現が 122 バイトを超えてはなりません。

V1 はデフォルトのバージョン識別子です。

LANGUAGE SQL
この関数は SQL でのみコーディングされていることを指定します。
SPECIFIC 特定名
関数の固有の名前を指定します。 この名前は、スキーマ名によって暗黙的 または明示的に修飾されます。 名前 (スキーマ名を含む) は、現行サーバーに存在する他の関数の特 定名であってはなりません。

specific-name の非修飾形式は SQL ID です。 修飾形式は、SQL ID (スキーマ名) の後にピリオドと SQL ID が続く形式です。

スキーマ名を指定しないと、関数名 (function-name) の 明示的または暗黙的スキーマ名と同じになります。 スキーマ名を指定する場合は、 関数名の明示的または暗黙的スキーマ名と同じでなければなりません。

SPECIFIC 文節を指定しないと、デフォルトの特定名は関数の名前と同じになります。 ただし、関数名に固有の名前が指定されていない場合、または関数名が単一のアスタリスクの場合、Db2は以下の形式で特定の名前を生成します。
SQLxxxxxxxxxxxx
ここで、'xxxxxxxxxxxx'は、名前を固有にする 12 文字のストリングです。

特定名は SYSROUTINES カタログ表の SPECIFIC 列に保管されます。 特定の名前を使用して、いくつかの SQL ステートメント (ALTER FUNCTION、COMMENT、DROP、GRANT、および REVOKEなど) で関数を一意的に識別することができます。また、Db2コマンド (START FUNCTION、STOP FUNCTION、および DISPLAY FUNCTION) で使用する必要があります。 ただし、関数をその特定名で呼び出すことはできません。

NOT DETERMINISTIC または DETERMINISTIC
関数が同じ入力引数を指定して呼び出されるたびに、その関数が同じ結果を戻すかどうかを指定します。
NOT DETERMINISTIC
関数は、同じ入力引数を指定して呼び出されるたびに同じ結果を戻さない場合があります。 関数は、結果に影響する状態値によって左右されます。 Db2は、この関数を参照するSELECT および SQL データ変更ステートメントを処理するときに、この情報を使用してビューと表式のマージを使用不可にします。 deterministic ではない (常には同じ結果が戻されない) 関数の例としては、 乱数を生成する関数があります。

関数プログラムが特殊レジスターにアクセスする場合、または別の非 deterministic 関数を呼び出す場合は、NOT DETERMINISTIC を明示的または暗黙的に指定する必要があります。 NOT DETERMINISTIC がデフォルトです。

DETERMINISTIC
関数は、同じ入力引数を指定して呼び出されるたびに常に同じ結果関数を戻します。 deterministic 関数の例としては、入力の平方根を計算する関数があります。 Db2はこの情報を使用して、この関数を参照する SELECT および SQL データ変更ステートメントのビューと表式のマージを有効にします。 DETERMINISTIC はデフォルトではありません。 適用できる場合は、この関数を参照する SQL ステートメントに対して最適でないアクセス・パスが選択されることを防ぐために、DETERMINISTIC を指定してください。

Db2は、関数プログラムが DETERMINISTIC または NOT DETERMINISTIC の指定と一致していることを検査しません。

EXTERNAL ACTION または NO EXTERNAL ACTION
Db2が管理しないオブジェクトの状態を変更するアクションを関数が実行するかどうかを指定します。 外部アクションの例としては、メッセージの送信やファイルへのレコードの書き込みがあります。
EXTERNAL ACTION
この関数は、Db2が管理しないオブジェクトの状態を変更するアクションを実行できます。

外部アクションで関数を呼び出す SQL ステートメントの中には、並列タスクが その関数を実行すると、誤った結果になるものがあります。 例えば、初期呼び出しを受けるたびに注釈を送信する関数の場合、関数ごとに 1 つの注釈が送信されるのではなく、並列タスクごとに 1 回ずつ送信されることになります。 並列処理を正しく扱うことのできない関数については、DISALLOW PARALLEL 節を指定します。

EXTERNAL ACTION を指定した場合、Db2:

  • 関数を参照する SELECT ステートメントと SQL データ変更ステートメントのビューと表式をマテリアライズします。 このマテリアライズは、この関数を参照する SQL ステートメントに対して選択されるアクセス・パスに悪影響を及ぼす可能性があります。 関数が外部アクションを行わない場合は、EXTERNAL ACTION を指定しないでください。
  • FETCH 操作間で、関数を 1 つのタスク制御ブロック (TCB) から別の TCB へ移 動しません。
  • カーソルがクローズされるまで、別の関数またはストアード・プロシージャーによる TCB の使用を許可しません。 これは、WITH HOLD と宣言されたカーソルについてもあてはまります。

コミットおよびロールバック操作の制御下にあるDb2の外部で行われたリソースへの唯一の変更は、RRS の制御下で行われた変更です。

SQL ルーチン本体が EXTERNAL ACTION を指定して定義された関数を呼び出す場合は、EXTERNAL ACTION を暗黙的または明示的に指定する必要があります。 EXTERNAL ACTION がデフォルトです。

NO EXTERNAL ACTION
この関数は、 Db2 が管理していないオブジェクトの状態を変更するような処理は一切行いません。 Db2はこの情報を使用して、この関数を参照する SELECT および SQL データ変更ステートメントのビューと表式のマージを有効にします。 適用できる場合は、この関数を参照する SQL ステートメントに対して最適でないアクセス・パスが選択されることを防ぐために、NO EXTERNAL ACTION を指定してください。

グローバル変数の有効範囲は、ルーチンの範囲外ですが、NO EXTERNAL ACTION を指定すると、グローバル変数をルーチン本体に設定することができます。

Db2は、関数プログラムが EXTERNAL ACTION または NO EXTERNAL ACTION の指定と一致しているかどうかを検査しません。

MODIFIES SQL DATASQL データを読み込み、または CONTAINS SQL
このルーチンが実行または呼び出すことができる SQL ステートメントおよびネストされたルーチンの分類を指定します。 データベース・マネージャーは、関数によって発行される SQL ステートメント、およびルーチンによってローカルに呼び出されるすべてのルーチンが、この指定と一致していることを検証します。ネストされたリモート・ルーチンが呼び出される場合、この検証は実行されません。 各文の分類については、 ルーチンのSQL文データアクセス分類を参照してください。
MODIFIES SQL DATA

関数がサポートしないステートメントを除き、任意の SQL ステートメントを関数が実行できるように指定します。 ALLOW PARALLEL が有効になっている場合は、MODIFIES SQL DATA を指定しないでください。

MODIFIES SQL DATAで定義された関数が、最も外側のSELECT文のSELECT句以外の場所で呼び出された場合、使用されるアクセスプランによっては関数が複数回呼び出される可能性があるため、結果は予測できません。

推奨事項 変更の開始SELECT 文が MODIFIES SQL DATA オプションで定義された関数を呼び出す場合、その関数の内部に入れ子になっている文が、より高い入れ子レベルの SQL 文で参照されているオブジェクトを変更しないようにしてください。 そうでなければ、予測不可能な結果が生じる可能性が高い。変更の終わり
READS SQL DATA
この関数が、データ・アクセス種別 READS SQL DATA、CONTAINS SQL、または NO SQL のステートメントを実行できるように指定します。 この関数は、データの変更を行う SQL ステートメントは実行できません。

READS SQL DATA がデフォルトです。

CONTAINS SQL
この関数が、データ・アクセス種別 CONTAINS SQL または NO SQL の SQL ステートメントのみを実行できるように指定します。 この関数は、データの読み取りまたは変更を行う SQL ステートメントを実行できません。
NULL INPUT(NULL入力)を呼び出した、または RETURNS NULL ON NULL INPUT
実行時にいずれかの入力引数が NULL の場合に、関数を呼び出すかどうかを指定 します。
NULL入力の場合
いずれかの引数値またはすべての引数値が NULL の場合に、関数が呼び出されることを指定します。 CALLED ON NULL INPUT を指定するには、NULL 引数値をテストするために関数本体をコーディングする必要があります。

CALLED ON NULL INPUT がデフォルトです。

RETURNS NULL ON NULL INPUT
いずれかの入力引数値が NULL の場合に、関数が呼び出されずに NULL 値が返されることを指定します。
静的ディスパッチ
関数解決時には、Db2は関数パラメーターの静的 (または宣言された) タイプに基づいて関数を選択します。 STATIC DISPATCH がデフォルトです。
ALLOW PARALLEL または DISALLOW PARALLEL
関数を並列実行可能にするかどうかを指定します。 以下に示す文節を 1 つ以上指定する場合、デフォルトは DISALLOW PARALLEL です。
  • NOT DETERMINISTIC
  • EXTERNAL ACTION
  • MODIFIES SQL DATA

それ以外の場合、ALLOW PARALLEL がデフォルトです。

ALLOW PARALLEL
関数を並列実行可能にすることを指定します。
DISALLOW PARALLEL
関数を並列実行可能にしないことを指定します。
ALLOW DEBUG MODEDISALLOW 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 であることを指定します。 デフォルトのコード化スキームは、パラメーター・リストまたは RETURNS 文節の CCSID 文節に指定されている値、またはインストール・パネル DSNTIPF の DEF ENCODING SCHEME フィールドに指定されている値です。

この文節を使用すると、文字ストリング・パラメーターまたはグラフィック・ストリング・パラメーターに対してコード化スキームを容易に指定することができます。 この PARAMETER CCSID 文節のほかに個々のパラメーターに対して個別に CCSID 文節が指定されている場合、すべての CCSID 文節で指定されている値が、この文節で指定されている値と同じでなければなりません。 この文節は、メッセージ・トークンおよび DBINFO など、ルーチンのシステム生成パラメーターに使用されるコード化スキームも指定します。

パラメーターのデータ・タイプが、文字またはグラフィック・タイプのストリングとして定義されているユーザー定義特殊タイプである場合、特殊タイプの CCSID は、この文節で指定されている値と同じでなければなりません。

パラメーターのデータ・タイプが文字またはグラフィック・ストリング配列エレメント、あるいは文字ストリング添字で定義されているユーザー定義配列タイプである場合、これらの配列属性の CCSID は、この文節で指定されている値と同じでなければなりません。

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

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

FL 500

ルーチンのバージョンに関連したパッケージの所有者を指定します。 デフォルトでは、プロセスがオブジェクト所有者属性および修飾子属性としてロールで定義されたトラステッド・コンテキストで実行されている場合、authorization-name はロールになります。 それ以外の場合、デフォルトはプロセスの SQL 許可 ID です。
AS ROLE
authorization-name が現行サーバーに存在するロールであることを指定します。
AS USER
authorization-name が許可 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 には提供されません。
特殊レジスタを継承するまたは DEFAULT SPECIAL REGISTERS
ルーチンに入ったときに特殊レジスターを設定する方法を指定します。
特殊レジスタを継承
表1のルーチンの特殊レジスタの特性の表にある規則に従って、特殊レジスタの値が継承されることを指定する。

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

DEFAULT SPECIAL REGISTERS
表1のルーチン内の特殊レジスタの特性の表の規則で示されるように、特殊レジスタがデフォルト値に初期化されることを指定する。
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 値は無視されます。

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 ステートメントが「呼び出し動作」または「実行動作」のいずれかを使用して処理されることを指定します。
参照 これらのオプションの影響については、「Authorization IDs and dynamic 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 RRRS、CS、または UR
ルーチンを、他の実行中のアプリケーションの影響からどの程度分離するかを指定します。 分離レベルに関する情報は、「ISOLATIONオプションの選択」 を参照してください。
RR
反復可能読み取りを指定します。
RS
読み取り固定を指定します。
CS
カーソル固定を指定します。 CS がデフォルトです。
UR
非コミット読み取りを指定します。
OPTHINT 'hint-id '
ルーチン本体に含まれている静的 SQL ステートメントに対して、照会の最適化ヒントを使用するかどうかを指定します。

hint-id は、最大128バイトの文字列であり、 Db2 サブシステムが入力として使用する行をPLAN_TABLEで検索する際に使用されます。 デフォルト値は空文字列 ('') で、これは Db2 サブシステムが静的SQL文に対して最適化ヒントを使用しないことを示します。

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

SQL PATH
Db2サブシステムが、ルーチン本体内の非修飾のユーザー定義データ・タイプ、関数、およびプロシージャー名 (CALL ステートメント内) を解決するために使用する SQL パスを指定します。 既定値は 「SYSIBM」、「SYSFUN」、「SYSPROC」、「SYSIBMADM 」、およびQUALIFIERオプションの値であり、これはステートメントの対象となるトリガーの修飾子です。 SQL パスの最大長は、2048 バイトです。 Db2 指定された各スキーマ名から末尾の空白を削除し、左右に区切り文字を追加し、最後のスキーマ名を除く各スキーマ名の後にカンマを1つ追加することで、長さを計算します。 その結果得られるストリングの長さが 2048 バイトを超えることはできません。
schema-name
スキーマを識別します。 Db2 CREATE文が処理される際に、スキーマが存在することを検証しません。 同一スキーマ名が、スキーマ名のリストに複数回表示されることはありません。

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

SYSTEM PATH
スキーマ名 「SYSIBM」、「SYSFUN」、「SYSPROC」、「SYSIBMADM」 を指定します。
SESSION_USER または USER
SESSION_USER (または USER) 特殊レジスターの値を指定します。 CREATE ステートメントの処理時、この実際の長さは、SQL PATH オプションに対して指定したスキーマ名のリストの合計長に含まれます。
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 ISOEURUSAJIS、または LOCAL
日付または時刻の値のストリング表記である結果値に対して日付形式を指定します。 詳細は、「datetime 値の文字列表現 」を参照してください。

デフォルトの形式は、ルーチンが定義されるシステムのインストール・パネル DSNTIP4 の DATE FORMAT フィールドで指定されます。 LOCAL オプションは、日付出口ルーチンが用意されていなければ、使用でき ません。

DECIMAL15 )DECIMAL31 )DECIMAL15 s 、または DECIMAL31 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 ステートメントを含めることができます。
列リストを指定しない FOR UPDATE 文節は、 静的または動的 SQL ステートメントに適用されます。 この文節を使用しない場合でも、列リストを使用する FOR UPDATE OF を指定して、FOR UPDATE 文節で指定された列のみに更新を制限するか、または更新ロックの獲得を指定することがきます。
TIME FORMAT ISOEURUSAJIS、または LOCAL
日付または時刻の値のストリング表記である結果値に対して時刻形式を指定します。 詳細は、「datetime 値の文字列表現 」を参照してください。

デフォルトの形式は、ルーチンが定義されるシステムのインストール・パネル DSNTIP4 の TIME FORMAT フィールドで指定されます。 LOCAL オプションは、日付出口ルーチンが用意されていなければ、使用でき ません。

NOT SECURED または SECURED
関数が行アクセス制御と列アクセス制御においてセキュアであると見なされるかどうかを指定します。 この関数の今後のすべてのバージョンには SECURED オプションまたは NOT SECURED オプションが適用されます。
NOT SECURED
関数が行アクセス制御と列アクセス制御においてセキュアであると見なされないことを指定します。

NOT SECURED がデフォルトです。

表でアクティブな列アクセス制御が使用されている場合、関数の呼び出し時に、関数の引数が、列マスクが有効になっている列を参照してはなりません。

SECURED
関数が行アクセス制御と列アクセス制御においてセキュアであると見なされることを指定します。

行の許可または列マスクで参照されている関数はセキュアでなければなりません。

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 サブシステム・パラメーターによって決定されます。 以下の 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 PL)」 を参照してください。

SQL 関数がプロシージャーを呼び出し、プロシージャーが COMMIT、ROLLBACK、CONNECT、RELEASE、または SET CONNECTION ステートメントを発行する場合、エラーが発行されます。

SQL-routine-body がコンパウンド・ステートメントである場合、少なくとも 1 つの RETURN ステートメントが含まれる必要があり、関数の呼び出し時に RETURN ステートメントを実行する必要があります。

SQL-routine-body に、期間指定または期間文節を含めることはできません。

ADD VERSION 文節または REPLACE 文節を使用した ALTER FUNCTION (コンパイル済み SQL スカラー) ステートメントや ALTER PROCEDURE (SQL ネイティブ) ステートメントは、SQL-routine-body 内では許可されません。

WRAPPED 難読化されたステートメントテキスト
関数のエンコード定義を指定します。 WRAP スカラー関数を使用して CREATE FUNCTION ステートメント をエンコードできます。

WRAPPED は、静的 CREATE ステートメントに指定してはなりません。

CREATE FUNCTION (コンパイル済み SQL スカラー) の注意事項

すべてのタイプのユーザー定義関数に関する考慮事項:
すべての種類のユーザー定義関数に共通する事項については、「CREATE FUNCTION ステートメント(概要)」 を参照してください。
SQL スカラー関数のタイプ:
CREATE FUNCTION ステートメントの構文が、CREATE FUNCTION (インライン化された SQL スカラー) の構文図と説明に準拠している場合、Db2はインライン化関数を定義し、パッケージは作成されません。 インライン化された SQL スカラー関数が呼び出されると、関数の RETURN ステートメントの expression が照会自体にコピー (インライン化) され、関数は呼び出されません。 インライン化されたSQLスカラー関数の属性は、CREATE FUNCTION文(インライン化されたSQLスカラー関数 )で説明されています。

それ以外の場合、Db2は、コンパイル済み関数を関連パッケージで定義しようとします。 例えば、RETURN ステートメントにスカラー全選択が含まれている場合、Db2は、コンパイル済み関数を定義しようとします。 コンパイルされたSQLスカラー関数の属性はCREATE FUNCTION文(コンパイルされたSQLスカラー関数 )で説明されています。

どのタイプの SQL スカラー関数が作成されるかを判別するには、SYSIBM.SYSROUTINES カタログ表の INLINE 列を参照してください。 INLINE 列の値が Y の場合、関数はインライン化された関数であることを示し、値が N の場合、関数はコンパイルされた関数であることを示します。

MODIFIES SQL DATA で定義された関数に関する考慮事項:
サブセレクトで関数が指定され、その関数が次のように定義されている場合、 MODIFIES SQL DATA、その関数が呼び出される回数は、使用されるアクセス計画によって異なります。
自己参照関数:
SQL 関数の本体 (つまり、CREATE FUNCTION ステートメントの本文にある RETURN ステートメントの expression または NULL) には、それ自体の再帰的呼び出しや、それを呼び出す別の関数に対する再帰的呼び出しを指定することはできません。このような関数は、参照の目的で存在しないからです。
従属オブジェクト:
SQL ルーチンは、ルーチン本体で参照されているオブジェクトに従属します。
難読化されたステートメント:
CREATE FUNCTION ステートメントは、難読化された形式で実行できます。 難読化されたステートメントでは、関数名、パラメーター、および WRAPPED キーワードのみが読み取り可能です。 ステートメントのその他の部分は、読み取り不能な、しかも難読化ステートメントをサポートするデータベース・サーバーでデコード可能な方法でエンコードされます。 WRAP スカラー関数は、難読化されたステートメントを作成します。 難読化されたステートメントから関数が 作成されるときに指定されるデバッグ・オプションはすべて無視されます。
ID の解決:
SQLプロシージャ言語(SQL PL) を参照し、SQLルーチン内で名前が列、変数、またはSQLパラメータに解決される方法に関する情報を確認してください。

列、変数、およびパラメーターに重複する名前が使用されている場合は、列の表指定子、パラメーターのルーチン名、SQL 変数のラベル名、およびグローバル変数のスキーマ名を使用して、重複名を修飾してください。

SQL 関数内でのエラー処理:
コンパイル済み SQL 関数本体の各 SQL ステートメントに対して発生する可能性がある例外を考慮する必要があります。 例外 SQLSTATE がハンドラーを使用して関数内で処理されないと、例外 SQLSTATE は関数の呼び出し元 SQL ステートメントに返されます。
SQL 関数定義内の行数:
コンパイル済み SQL 関数の作成時、情報は CREATE ステートメント内の各行に保持されます。 行数は、改行の制御文字の存在によって決まります。
コンパイル済み SQL スカラー関数では、改行制御文字 は改行に使用される特殊文字です。 コンパイル済み SQL スカラー関数の改行制御文字には、以下があります。
  • 改行 (ライン・フィード)
  • 改行 (ニュー・ライン)
  • 復帰
  • 復帰のあとに改行 (ライン・フィード)
  • 復帰のあとに改行 (ニュー・ライン)
制御文字の詳細については、「SQLにおける文字とトークン 」を参照してください。
SQL プロセッサー・プログラムに関する考慮事項:
SPUFI、 Db2 command line processor、 DSNTEP2 などのSQLプロセッサプログラムでは、ルーチン本体でセミコロンで終わるSQLステートメントが正しく解析されない場合があります。 これらのプロセッサー・プログラムは、複数の SQL ステートメント (各ステートメントは終了文字で分離されている) を入力として受け入れます。 セミコロンをSQL文の終端文字として使用するプロセッサプログラムでは、セミコロンが埋め込まれたCREATE FUNCTION文が切り捨てられ、その一部のみが Db2 に渡される可能性があります。 そのため、これらのプロセッサー・プログラムの場合は、SQL 終了文字の変更が必要に なる可能性があります。 SPUFIと DSNTEP2 のターミネータ文字を変更する方法については、「SPUFI入力データセットにおけるSQLターミネータ文字の設定」 を参照してください。
パッケージの考慮事項:
コンパイル済み SQL スカラー関数で、パッケージが作成されます。 最初のバージョンの関数に関連するパッケージは、以下のように命名されます。
  • location は、CURRENT SERVER 特殊レジスターの値に設定されます。
  • パッケージ用の collection-id (スキーマ) は、関数のスキーマ修飾子と同じです。
  • package-id は、関数の固有名と同じです。
  • version-id は、関数の初期バージョン用のバージョン ID と同じです。

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

  • FLAG(I)
  • SQLERROR(NOPACKAGE)
  • イネーブル(*)
バインド・コマンド・オプションに対する関数オプションの対応:
次の表には、CREATE FUNCTION と ALTER FUNCTION 用のオプション、および対応するバインド・コマンド・オプションがリストされています。 BIND および REBIND オプションについては、パッケージ、プラン、サービスを参照してください。
表 1. バインド・オプションに対する関数オプションの対応
CREATE FUNCTION または ALTER FUNCTION のオプション バインド・コマンド・オプション
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)
DYNAMICRULES RUN DYNAMICRULES(RUN)
DYNAMICRULES BIND DYNAMICRULES(BIND)
DYNAMICRULES DEFINEBIND DYNAMICRULES(DEFINEBIND)
ダイナミックルール定義実行 DYNAMICRULES(DEFINERUN)
DYNAMICRULES INVOKEBIND DYNAMICRULES(INVOKEBIND)
DYNAMICRULES INVOKERUN DYNAMICRULES(INVOKERUN)
GET_ACCEL_ARCHIVE NO アクセルアーカイブ取得(NO)
GET_ACCEL_ARCHIVE YES GETACCELARCHIVE(YES)
ISOLATION LEVEL CS ISOLATION(CS)
ISOLATION LEVEL RS ISOLATION(RS)
ISOLATION LEVEL RR 隔離(RR)
隔離レベル 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)
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_ROUND_FLOOR ROUNDING(FLOOR)
ROUNDING DEC_ROUND_HALF_DOWN ROUNDING(HALFDOWN)
ROUNDING DEC_ROUND_HALF_EVEN ROUNDING(HALFEVEN)
ROUNDING DEC_ROUND_HALF_UP ROUNDING(HALFUP)
ROUNDING DEC_ROUND_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)
関数オブジェクトのアプリケーション互換性レベルに関する考慮事項
アプリケーション互換性レベルは、新機能および機能拡張の採用と使用を制御します。 オブジェクトが作成または変更されると、2 つの別個のアプリケーション互換性レベルが使用されます。1 つはオブジェクトの定義を処理するために使用され、もう 1 つはオブジェクト本体内の SQL ステートメントを処理するために使用されます。
オブジェクト定義

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

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

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

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

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

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

コンパイル済み SQL スカラー関数のデプロイ:
コンパイル済み SQL スカラー関数をターゲット・ロケーションにデプロイする BIND DEPLOY コマンドが出されると、SECURED オプションおよび NOT SECURED オプションがデプロイ・プロセスに組み込まれます。

コンパイル済み SQL スカラー関数をデプロイするときに、同じターゲット名を持つ関数がターゲット・ロケーションに存在していない場合は、デプロイ対象関数が新規関数としてターゲット・ロケーションに作成され、デプロイメント元に指定されていたものと同じ SECURED オプションまたは NOT SECURED オプションが設定されます (あるいはデフォルトの NOT SECURED が使用されます)。

コンパイル済み SQL スカラー関数をデプロイするときに、同じターゲット名を持つ関数がターゲット・ロケーションに既に存在している場合は、デプロイ対象関数はこの関数の新しいバージョンとして追加されるか、または既存のバージョンを置き換えます。 デプロイ対象関数の SECURED または NOT SECURED オプションの設定は、ターゲット・ロケーションの既存の関数の設定と同じである必要があります。

関数のバージョン:
SQL 関数に対する CREATE FUNCTION ステートメントでは、関数の初期バージョンを定義します。 ALTER FUNCTION ステートメントの ADD VERSION 文節を使用して、追加のバージョンを定義できます。 関数のすべてのバージョンは、同じ関数シグニチャーと同じ固有名を共用します。 ただし、パラメーター名は関数のバージョン間で異なる可能性があります。 関数の 1 つのバージョンだけを、アクティブな関数バージョンであると見なすことができます。
代替構文およびシノニム:
Db2ファミリー内の以前のリリースのDb2または他の製品との互換性を提供するために、Db2は以下の代替構文をサポートしています。
  • NOT DETERMINISTIC のシノニムとして VARIANT
  • DETERMINISTIC のシノニムとして NOT VARIANT
  • RETURNS NULL ON NULL INPUT のシノニムとして NOT NULL CALL
  • CALLED ON NULL INPUT のシノニムとして NULL CALL
  • TIMEZONE は、 TIME ZONE の代替として指定できます。

CREATE FUNCTION の例(コンパイルされた SQL スカラー関数)

入力ストリングのテキストを逆順で返すスカラー関数を定義します。
    CREATE FUNCTION REVERSE(INSTR VARCHAR(4000))
      RETURNS VARCHAR(4000)
      DETERMINISTIC NO EXTERNAL ACTION CONTAINS SQL
      BEGIN
      DECLARE REVSTR, RESTSTR VARCHAR(4000) DEFAULT '';
      DECLARE LEN INT;
      IF INSTR IS NULL THEN
      RETURN NULL;
      END IF;
      SET (RESTSTR, LEN) = (INSTR, LENGTH(INSTR));
      WHILE LEN > 0 DO
      SET (REVSTR, RESTSTR, LEN) 
        = (SUBSTR(RESTSTR, 1, 1) CONCAT REVSTR, 
        SUBSTR(RESTSTR, 2, LEN - 1),
        LEN - 1);
     END WHILE;
     RETURN REVSTR;
   END#