変更の開始

の APPLCOMPAT レベルの互換性のない変更。 Db2 12

Db2 12 の高いアプリケーション互換性 (APPLCOMPAT) レベルでアプリケーションの実行を開始する前に、新しい SQL 機能の使用とは無関係な特定の動作の変更に合わせてアプリケーションを調整する必要があるかもしれません。

IFCID 0376トレースとAPPLCOMPATレベルの互換性のない潜在的な変更の特定

番組固有のプログラミング・インターフェース情報を開始する。

IFCID 0239でパッケージ・レベルのアカウンティングまたはモニタ・トレースを実行し、SQLと互換性のない変更を示すQPACFLGSフィールドを確認できます。 IFCID 0376 に対してトレースが開始され、アプリケーションがより低い APPLCOMPAT レベルで実行される場合、より高い APPLCOMPAT レベルで動作が変化する機能や関数に関する詳細は、フィールド QW0376FN に記述される。

より高い APPLCOMPAT レベルで実行を開始する SQL ステートメントで起こりうる互換性のない変更の説明は、DSNWMSGS フラットファイルの IFCID 0376 セクションにもあります。 DSNWMSGSの最新バージョンは、 Db2 12 for z/OS® ライセンスをお持ちのお客様のみご利用いただけます。 情報は PDF ファイルにあります。 この情報を検索するには、 Db2 12 for z/OS IFCIDフラットファイル(DSNWMSGS )を参照してください。

終了番組固有のプログラミング・インターフェース情報。

APPLCOMPAT レベルの互換性のない変更の概要

次の表は、 Db2 12 の高い APPLCOMPAT レベルでアプリケーションを初めて実行したときに発生する可能性のある、互換性のない変更をまとめたものです。 APPLCOMPATレベル列は、アプリケーションが APPLCOMPATレベル新ビヘイビア列に記述された新ビヘイビアに遭遇する可能性のある、最も低いアプリケーション互換レベルを示す。

V10R1 そのため、この値を持つ行の Previous deprecated behavior 列には、サブシステム・パラメータなど、アプリケーションが適切な調整を行うまで非推奨の動作を継続できるようにする他の設定がリストされます。 QW0376FN トレース・コードの列には、アプリケーションが低い APPLCOMPAT レベルで実行されているときに IFCID 0376 が有効になっている場合に返されるファンクション・コードが含まれています。

APPLCOMPAT レベル APPLCOMPATレベルの新しい動作 以前の非推奨動作 QW0376FN トレースコード
V12R1M504

明示的または暗黙的にベース・テーブルのテーブル・スペースを作成するSQL文は、常にパーティション・バイ・グロース(PBG)またはパーティション・バイ・レンジ(PBR)テーブル・スペースを作成します。

また、 Db2 、シノニムやハッシュ編成のテーブルを作成しようとしたり、既存のテーブルをハッシュ編成に変更しようとしたりするステートメントに対しては、常にエラーが返される。

詳しくは、 非推奨オブジェクトの作成防止を参照のこと。

これらの非推奨型のオブジェクトは正常に作成できる:

  • パーティション化 (非 UTS) 表スペース
  • 分割された(非UTS)テーブルスペース(複数のテーブルを含む
  • 既存の(UTS以外の)テーブルスペースに新しいテーブルを設置する
  • ハッシュ構成表
  • 同義語
V12R1M504 Db2 は、CURRENT_SERVER や CURRENT_TIMEZONE という名前の列や変数を非限定識別子で作成しようとすると、SQLCODE -206 エラーを返します。 詳細については、 カラム名のCURRENT_TIMEZONEとCURRENT_SERVERを参照のこと。 CURRENT_SERVERとCURRENT_TIMEZONEはカラム名または変数名として使用できる。 1204
V12R1M503 Db2 は、SET_MAINT_MODE_RECORD_NO_TEMPORALHISTORY ストアド・プロシージャの呼び出しに対してエラーを返します。 詳細は、 APPLCOMPATが V12R1M503 以上の場合、SET_MAINT_MODE_RECORD_NO_TEMPORALHISTORYストアド・プロシージャはサポートされませんを参照してください。 SET_MAINT_MODE_RECORD_NO_TEMPORALHISTORYストアド・プロシージャへの呼び出しが受け付けられます。 1215032
V12R1M503 システム期間一時テーブルの DATA CHANGE OPERATION 列に対応する履歴テーブル列に NULL 値を含む行は、システム期間一時テーブルが ON DELETE ADD EXTRA ROW 属性で定義されている場合でも、期間指定を含むクエリの中間結果の一部と見なされます。 システム期間一時テーブルがON DELETE ADD EXTRA ROWで定義されている場合、クエリは中間結果セットからNULL値を含む行を省略し、不完全な結果を返す可能性があります。 1215031
V12R1M500

KEEPDYNAMIC(YES)バインドオプションは、COMMIT文とROLLBACK文の両方の結果に影響する。 KEEPDYNAMIC(YES)を使用すると、パッケージ内の動的SQL文はCOMMITまたはROLLBACK後も保持され、文は再度PREPAREすることなく実行できます。 詳しくは、 KEEPDYNAMIC(YES) ROLLBACKのバインドオプションサポートを参照のこと。

KEEPDYNAMIC(YES)バインドオプションはCOMMIT文にのみ適用されます。 ROLLBACK文の後、動的SQL文を実行する前に、もう1度PREPAREが必要です。

V12R1M500 Db2 POWER 関数が DOUBLE 引数で呼び出され、範囲外の値を返した場合、SQLCODE +802 警告を返します。 詳細は、「 POWER 組み込み関数は範囲外の DOUBLE 結果に対して警告 SQLCODE を返す 」を参照してください。 Db2 POWER 関数が DOUBLE 引数で呼び出され、範囲外の値を返した場合、SQLCODE -802 エラーが返されます。 1201
V11R1 引数が 32764 より大きい VARCHAR 組み込み関数を呼び出すと、SQLCODE -171 エラーが返されます。 32764を超える引数を持つVARCHAR組込み関数の呼び出しは受け入れられる。 1111
V11R1 引数が 32764 より大きい SPACE 組み込み関数を呼び出すと、SQLCODE -171 エラーが返されます。 引数が32764より大きいSPACE組込み関数の呼び出しは受け入れられる。 1110
V11R1

Db2 TIMESTAMPへの明示的キャストの入力を、文字列値の文字表現として解釈する。

TIMESTAMP への明示的な CAST の入力が Store Clock 値の場合、SQLCODE -180 エラーが返されます。 TIMESTAMP値の変換には、暗黙のキャストの代わりにTIMESTAMP組み込み関数を使用することができます。

詳細については、 CAST(string AS TIMESTAMP)の結果の変更を参照してください。

Db2 8バイト文字列をTIMESTAMPとして明示的にCASTした場合、Store Clock値として解釈されたり、13バイト文字列をGENERAGE-UNIQUE値として解釈されたりする可能性があります。 1109
V11R1 Db2 は、リソース制限ファシリティ(RLF)検索に以下の特殊レジスタ値の全長を使用する:CURRENT CLIENT_USERID、CURRENT CLIENT_WRKSTNNAME、CLIENT_APPLNAME、またはCURRENT CLIENT_ACCTG。 Db2 CURRENT CLIENT_USERID、CURRENT CLIENT_WRKSTNNAME、CLIENT_APPLNAME、またはCURRENT CLIENT_ACCTG。以下の特別なレジスタ値が、 の前にサポートされている長さを超える場合、リソースRLF検索のために切り捨てられた値を使用する。 Db2 11 1108
V11R1 CURRENT CLIENT_WRKSTNNAME特別レジスタは、切り捨てられることなく指定された値に設定される。 詳細については、「 CURRENT CLIENTの特殊レジスタ長増加 」を参照のこと。 CURRENT CLIENT_WRKSTNNAME 特殊レジスタは、指定された値が Db2 11 の前にサポートされている長さを超える場合、切り捨てられた値に設定される。 1107
V11R1 CURRENT CLIENT_USERID特別レジスタは、切り捨てられることなく指定された値に設定される。 詳細については、「 CURRENT CLIENTの特殊レジスタ長増加 」を参照のこと。 CURRENT CLIENT_USERID特別レジスタは、指定された値が Db2 11 の前にサポートされている長さを超える場合、切り捨てられた値に設定される。 1106
V11R1 CURRENT CLIENT_APPLNAME特別レジスタは、切り捨てられることなく指定された値に設定される。 詳細については、「 CURRENT CLIENTの特殊レジスタ長増加 」を参照のこと。 CURRENT CLIENT_APPLNAME 特殊レジスタは、指定された値が Db2 11 の前にサポートされている長さを超える場合、切り捨てられた値に設定される。 1105
V11R1 CURRENT CLIENT_ACCTNG特別レジスタは、切り捨てられることなく指定された値に設定される。 詳細については、「 CURRENT CLIENTの特殊レジスタ長増加 」を参照のこと。 CURRENT CLIENT_ACCTNG特別レジスタは、指定された値が Db2 11 の前にサポートされている長さを超える場合、切り捨てられた値に設定される。 1104
V11R1 リソース制限機能(RLF)は、同じスレッドで複数のパッケージから動的SQL文が発行される場合、各パッケージに固有のASUTIME制限を使用します。 詳細については、 ダイナミックSQLのRLF実施におけるASUTIME制限の変更を参照のこと。 RLFは、同じスレッドから発行されるすべての動的SQL文に対して、最初に処理されるパッケージのASUTIME制限を使用します。 1103
V11R1

XPath処理は、フィルタリングされた結果に対して特定のエラーが発生した場合にも続行される:

  • ゼロ除算などの無効な演算の前に、述部によってデータが結果からフィルタリングされる
  • データが非互換データ・タイプに明示的にキャストされる

詳細については、 フィルタリングされた結果でエラーが発生しても XPath 処理は続行される を参照してください。

Db2 は、XPath 処理中にフィルタリングされたデータで発生するその他のエラー状況について、SQLCODE -128 エラーを返します。 1102
V11R1 Db2 は、XMLDOCUMENT 関数を呼び出さずに XML 列値を挿入する INSERT 文に対して SQLCODE -20345 エラーを返しません。 詳細については、 XML列の挿入と更新のために暗黙的に追加されるXMLドキュメント・ノードを参照してください。 Db2 は、XMLDOCUMENT 関数も呼び出さずに XML 列値を挿入する INSERT 文に対して -20345 エラーを返します。 1101
V11R1 Db2 12 を使うと、入力ホスト変数を数値データ型から文字列データ型に、または文字列データ型から数値データ型に暗黙的にキャストすることができます。 APPLCOMPAT レベルが V10R1 で、DDF_COMPATIBILITY サブシステム・パラメーターが SP_PARMS_NJV に設定され、アプリケーションがバージョン 10.5 以前のデータ・サーバー・クライアントまたはドライバーを使用する非 Java™ クライアント・アプリケーションの場合、以下の暗黙のキャスト操作は無効になります:
  • 数値データ型から文字列データ型へのホスト変数
  • 文字列データ型から数値データ型へ

詳細については、 マクロ DSN6FAC の DDF_COMPATIBILITY を参照のこと。

8
V10R1 XMLSERIALIZE関数は、空のXMLタグを以下のいずれかの要素形式でシリアライズする:
  • 空要素: <xml-element/>
  • 開始要素と終了要素: <xml-element></xml-element>

XML_RESTRICT_EMPTY_TAG サブシステム・パラメーターが YES に設定されている場合、空の XML 要素は常に、XMLSERIALIZE 関数によって開始要素および終了要素の形式、 <xml-element></xml-element> にシリアライズされます。

デフォルト設定は NO です。 詳細については、 DSN6SPRM の XML_RESTRICT_EMPTY_TAG を参照してください。

1112
V10R1 Db2は、無効な引数を持つSUBSTR関数の呼び出しに対してSQLCODE -138エラーを返します。 詳細は、 SUBSTR 組み込み関数の無効な入力に対する変更と SQLCODE -138 エラーを参照してください。

SUBSTR_COMPATIBILITY サブシステム・パラメータが PREVIOUS に設定され、アクティブ化された最高関数レベルが V12R1M500 以上でない場合、 Db2 は、適切な SQLCODE -138 エラーを発行せずに、無効な引数を持つ SUBSTR 組み込み関数を処理できます。

PREVIOUSがデフォルト値。 SUBSTR COMPATIBILITY フィールド (SUBSTR_COMPATIBILITY サブシステム・パラメータ) を参照。
14
V10R1 Db2 は、WITH UR属性を持つINSERT、UPDATE、DELETE文の準備に対してSQLエラー・コードを発行します。

変更の開始ALLOW_UPD_DEL_INS_WITH_UR サブシステム・パラメータが YES に設定されている場合、 Db2 は WITH UR 属性を持つ INSERT、UPDATE、または DELETE 文を準備するために無効な SQL 構文を許容し続けます。 デフォルト設定は NO です。 詳細については、 マクロ DSN6SPRM の ALLOW_UPD_DEL_INS_WITH_UR を参照のこと。変更の終わり

この無効なSQL構文は、以前のリリース( Db2 )では誤って許可されていました。

13
V10R1 Db2 SELECT INTO 文の一番外側 に UNION または UNION ALL を含む SQL 文を含むパッケージのバインドまたはリバインドで、SQLCODE -109 エラーが発生します。 from-clause

DISALLOW_SEL_INTO_UNION サブシステム・パラメーターが NO に設定されている場合、 Db2 は、SELECT INTO ステートメントが一番外側の from 句に UNION または UNION ALL を含む無効な SQL 構文を許容し続けます。 Db2 12 、デフォルトはYES。 詳細については、 マクロ DSN6SPRM の DISALLOW_SEL_INTO_UNION を参照のこと。

この無効なSQL構文は、以前の Db2

11
V10R1

LTRIM関数、RTRIM関数、STRIP関数を呼び出すと、以下の結果が返される:

  • LTRIMまたはRTRIM関数の string-expression 引数がEBCDIC混合データ文字列であるが、無効な文字列を含む場合、 Db2 はSQLCODE -171エラーを返す。
  • string-expression が EBCDIC 混合データ文字列の場合、シフトアウト制御文字 (X'0E') の直後に、その両側にトリム文字を持つシフトイン制御文字 (X'0F') が続くと、その結果からトリムされる。
BIF_COMPATIBILITY サブシステム・パラメータが V9_TRIM に設定されている場合、 Db2 は、 DB2® 9 以前の動作で LTRIM、RTRIM、または STRIP 関数の処理を継続する。 詳細については、 BIF COMPATIBILITY フィールド(BIF_COMPATIBILITY サブシステム・パラメータ )を参照してください。 10
V10R1 CHARまたはVARCHAR関数への入力データが10進数値である場合、またはターゲット・データ型がCHARまたはVARCHARであるCAST指定に10進数が入力された場合、結果は以下の属性のいずれかを持ちません:
  • 先行ゼロ。
  • 末尾の小数点文字。
  • 正の 10 進値の先行ブランク。
BIF_COMPATIBILITY サブシステム・パラメータが V9_DECIMAL_VARCHAR または V9 に設定されている場合、または SYSCOMPAT_V9 スキーマが使用されている場合、10 進数データを文字データに変換する操作は DB2 9 以前のフォーマット動作を使用します。 詳細については、 BIF COMPATIBILITY フィールド(BIF_COMPATIBILITY サブシステム・パラメータ )を参照してください。 2

の APPLCOMPAT レベルの互換性のない変更内容 Db2 12

以下のエントリでは、 Db2 13 の APPLCOMPAT レベルを高くしてアプリケーションを初めて実行したときに発生する可能性のある、互換性のない変更について詳しく説明しています。

へのパススルーでサポートされる新しい組み込み関数名 IBM® Db2 Analytics Accelerator

APPPLCOMPAT レベル V12R1M507 以降では、以下の組み込み関数がサポートされています。 パススルー専用の組み込み関数は、 IBM Db2 Analytics Accelerator を通してサポートされています。 Db2 アプリケーションが、これらの名前を持つ既存のユーザー定義関数への修飾されていない参照を持つ場合、特定の状況下では、名前とシグネチャが一致すれば、代わりに新しい組み込み関数を呼び出すようになるかもしれません。

取るべき行動 Db2、意図したユーザー定義機能を確実に実行するを参照。

明示的に作成されたテーブル・スペースの変更

APPLCOMPAT レベル V12R1M506 以上から、以下の変更が有効になる:

  • 明示的に作成されたユニバーサル表スペース内にある表をドロップすると、エラーは返されなくなりました。 代わりに、表スペースは暗黙的にドロップされます。
  • 明示的に作成された LOB 表スペースにある補助表をドロップすると、その LOB 表スペースがデータベース内で維持されなくなりました。 代わりに、表スペースは暗黙的にドロップされます。
取るべき行動:
  • DROP TABLESPACE ステートメントを使用してユニバーサル表スペースと表をドロップする既存のアプリケーションは、DROP TABLE ステートメントを代わりに使用するように変更できるようになりました。
  • 補助表がドロップされた場合、LOB 表スペースが再使用のために保持されることが想定されているアプリケーションまたはツールは、それに応じて変更する必要があります。
へのパススルーでサポートされる新しい組み込み関数名 IBM Db2 Analytics Accelerator

APPPLCOMPAT レベル V12R1M504 以降では、以下の組み込み関数がサポートされています。 パススルー専用の組み込み関数は、 IBM Db2 Analytics Accelerator を通してサポートされています。 Db2 アプリケーションが、これらの名前を持つ既存のユーザー定義関数への修飾されていない参照を持つ場合、特定の状況下では、名前とシグネチャが一致すれば、代わりに新しい組み込み関数を呼び出すようになるかもしれません。

取るべき行動: Db2 が意図したユーザー定義関数を確実に実行する.

カラム名に CURRENT_TIMEZONE と CURRENT_SERVER を指定する

APPLCOMPATレベル V12R1M504、またはそれ以降で、 Db2 環境に CURRENT_TIMEZONE や CURRENT_SERVER などの名前を持つ既存の列や変数がある場合は、これらの列名を区切るようにアプリケーションを変更する必要があります。

取るべき行動 以下のクエリーを使用して、その名前を持つカラムと変数を特定することができます。

オブジェクト・タイプ 照会の例
Columns
SELECT * FROM SYSIBM.SYSCOLUMNS
  WHERE NAME IN('CURRENT_SERVER','CURRENT_TIMEZONE');
変数
SELECT * FROM SYSIBM.SYSVARIABLES
WHERE NAME IN('CURRENT_SERVER','CURRENT_TIMEZONE');

結果に基づいて、例えば SYSIBM.SYSPACKDEP カタログ表を照会することにより、依存関係をチェックして、これらの名前の区切り文字で区切られていない形式に依存する静的アプリケーションを識別することができます。

非推奨オブジェクトの作成防止

APPPLCOMPAT レベル V12R1M504 以降では、明示的または暗黙的にベース・テーブルのテーブル・スペースを作成する SQL 文は常に、パーティション・バイ・グロース(PBG)またはパーティション・バイ・レンジ(PBR)テーブル・スペースであるユニバーサル・テーブル・スペース(UTS)を作成します。 また、ベース・テーブルが常にUTS内に作成されることの副作用として、以前は成功した特定のSQL文に対してエラーが返されることがある。

  • LOB 列の CREATE AUX TABLE 文は、ベース・テーブルが PBG テーブル・スペースにある場合に PART 節が必要なため、SQLCODE -769 エラーで失敗することがあります。
  • DROP TABLE 文は PBG テーブル・スペース内のテーブルではサポートされていないため、SQLCODE -669 エラーで失敗することがあります。 代わりにDROP TABLESPACE文を使用しなければならない。 (APPLCOMPATレベル V12R1M506、この状況は解決される)。詳細については、 「機能レベル 506 ( PH16829 - 2019 年 10 月) 」を参照してください。
  • CREATE TABLE ステートメントが同じテーブル・スペースに複数のテーブルを作成しようとすると、SQLCODE -646 エラーで失敗することがあります。 各UTSには1つのテーブルしかない。

APPLCOMPAT レベル 504 以降では、以下の SQL 文は非推奨オブジェクトを作成する代わりにエラーを返します:

  • CREATE SYNONYM ステートメント
  • 既存の非 UTS 表スペースを指定する CREATE TABLE ステートメント
  • ORGANIZE BY HASH を指定する CREATE TABLE ステートメントおよび ALTER TABLE ステートメント

取るべき行動: 非推奨のオブジェクト・タイプを使用するようにアプリケーションを更新してください。

ヒントすべての新しいデータベース・オブジェクトには非推奨の型を使用するのがベストですが、リカバリの状況など、必要に応じてより低いAPPLCOMPATレベルを使用して非推奨のテーブル・スペースを作成することができます。 詳しくは、 非UTSテーブル・スペースの作成(非推奨 )を参照のこと。
ON DELETE ADD EXTRA ROW を使用して定義されたシステム期間テンポラル表の結果変更

変更の開始アプリケーション互換性レベル V12R1M503 以降では、システム期間一時テーブルの DATA CHANGE OPERATION 列に対応する履歴テーブル列に NULL 値が含まれる行は、システム期間一時テーブルが ON DELETE ADD EXTRA ROW 属性で定義されている場合でも、期間指定を含むクエリの中間結果の一部と見なされます。 低いアプリケーション互換性レベルで実行されるクエリは、中間結果セットからNULL値を含む行を引き続き省略し、不完全な結果を返す可能性があります。変更の終わり

この動作変更は、アプリケーション互換性レベル V12R1M503 またはそれ以上で実行されるクエリで、以下の条件がすべて満たされている場合に発生します:

  • このクエリは、システム期間テンポラル・テーブル(STT)を FOR SYSTEM_TIME FROM value1 から value2 (または value1 および value2 )期間指定。 STT は、直接的に参照することも、間接的に参照することもできます。
  • STT は、ON DELETE ADD EXTRA ROW 節を使用して定義されます。
  • STT は、DATA CHANGE OPERATION 列を使用して定義されます。
  • 一時的な監査機能を使用するためのマイグレーションの間に、変更された表に既存の行が含まれます。
  • DATA CHANGE OPERATION 列には、既存の行のデフォルトの NULL 値が入力されます。
  • クエリが実行されると、履歴テーブルには、STTのDATA CHANGE OPERATION列に関連付けられた列にNULL値を持つレコードが含まれます。

取るべき行動: IFCID 0376のトレースを開始します。 トレース出力では、機能コード 1215031 または 1202 が、影響を受けた照会を識別します。

APPLCOMPAT が V12R1M503 以上の場合、SET_MAINT_MODE_RECORD_NO_TEMPORALHISTORY ストアード・プロシージャーはサポートされません。

アプリケーション互換性レベル V12R1M503 以降では、 SYSPROC.SET_MAINT_MODE_RECORD_NO_TEMPORALHISTORY ストアドプロシージャを呼び出したユーザーまたはアプリケーションに対して、 Db2 はエラーを返します。

取るべき行動: IFCID 0376のトレースを開始します。 トレース出力では、機能コード 1215032 または 1203 は、SYSPROC.SET_MAINT_MODE_RECORD_NO_TEMPORALHISTORY ストアード・プロシージャーを使用するアプリケーションを識別します。 このようなアプリケーションを変更して、SYSIBMADM.REPLICATION_OVERRIDE 組み込みグローバル変数の値を代わりに「Y」に設定します。 詳細は SYSIBMADM.REPLICATION_OVERRIDE 組み込みグローバル変数を参照。

GRAPHICおよびVARGRAPHICを組み込み関数としてサポート

APPLCOMPATレベル V12R1M502、またはそれ以上のレベルで、環境にGRAPHICまたはVARGRAPHICという名前の既存のユーザー定義関数が含まれている場合、既存のユーザー定義関数への修飾されていない参照を持つアプリケーションは、特定の状況でユーザー定義関数の代わりに組み込み関数を起動し始めることがあります。

取るべき行動 Db2、意図したユーザー定義機能を確実に実行するを参照。

無効な入力と SQLCODE -138 エラーに対する SUBSTR 組み込み関数の変更

関数レベル V12R1M500 以降では (APPLCOMPAT レベルでは制御されません)、SUBSTR_COMPATIBILITY サブシステム・パラメータは、SUBSTR スカラ関数に記述されている要件を満たさない無効な引数に対して、SUBSTR 組み込み関数の呼び出しが一貫して SQLCODE -138 エラーを返すかどうかを指定します。 つまり、SUBSTR_COMPATIBILITYがCURRENTに設定されている場合、 Db2 、SUBSTR組み込み関数に関する文書化された規則が常に適用され、無効な入力に対してはSQLエラー・コードが返されます。 SUBSTR 組み込み関数の有効な入力規則の詳細については、. CURRENT設定での動作は、他のプラットフォームの Db2 との互換性を向上させる。

デフォルトのSUBSTR_COMPATIBILITYがPREVIOUSに設定されている場合、 Db2 、無効な入力に対して適切なエラー・メッセージを発行する代わりに、誤って結果を返すことがありました。 デフォルト値は「PREVIOUS」。 詳細については、 SUBSTR COMPATIBILITY フィールド(SUBSTR_COMPATIBILITY サブシステム・パラメータ )を参照してください。

Db2 12 におけるこの変更の導入に関する詳細については、以下の APAR クロージングテキストを参照のこと。 PH36071.

取るべき行動: SUBSTR_COMPATIBILITY サブシステム・パラメータを CURRENT に設定する前に、この変更を処理するためにアプリケーションの一部を変更する必要があるかもしれません。 IFCID 0376 のトレースを有効にした場合、トレース出力の QW0376FN フィールドにあるファンクション識別子 '14' の値は、この変更によって影響を受ける可能性のあるアプリケーションを特定します。

ROLLBACK に対する KEEPDYNAMIC(YES) バインド・オプションのサポート

APPLCOMPAT レベル V12R1M500 以降では、KEEPDYNAMIC(YES) バインド・オプションは COMMIT 文と ROLLBACK 文の両方に影響します。 KEEPDYNAMIC(YES) では、パッケージ内の動的 SQL ステートメントは COMMIT または ROLLBACK の後に保持され、それらのステートメントは、別の PREPARE なしで再度実行可能です。 この変更により、以下のような違いが生じる:

  • PREPARE 文が先行しない OPEN 文では、SQLCODE -514 エラーは発生しません。
  • PREPARE 文が先行しない EXECUTE 文では、SQLCODE -518 エラーは発生しません。

より低い APPLCOMPAT レベルでは、KEEPDYNAMIC(YES) バインド・オプションは COMMIT 文にのみ適用されます。 ROLLBACK文の後、動的SQL文が実行できるように、別のPREPAREが必要です。 つまり、KEEPDYNAMIC(YES)でバインドされたパッケージは、ROLLBACKが発行された後、再び動的SQL文を準備する必要がありました。

取るべき行動: KEEPDYNAMIC(YES)バインドオプションを使用しているパッケージを見直す。 ROLLBACK文の実行後にSQL文を再度準備するPREPARE文を削除することで、KEEPDYNAMIC(YES)でバインドされた動的SQLプログラムをより効率的に実行することができます。 APPLCOMPATレベル V11R1 またはそれ以前のプログラムを実行する必要がなくなったと確信できるまでは、この処置をとらないでください。 詳細はプリペアド・ステートメントをコミットやロールバックの時点以降も保持する方法と KEEPDYNAMICバインド・オプションを参照してください。

POWER 組み込み関数は、範囲外の DOUBLE 結果に対して警告 SQLCODE を返します

APPLCOMPAT レベル V12R1M500 以降で、DOUBLE 引数を持つ POWER® 組み込み関数を範囲外の結果で呼び出すと、SQLCODE +802 警告が返される場合があります。 例えば、以下のクエリはSQLCODE +802の警告を返します:

SELECT POWER(DOUBLE(2.0E38), DOUBLE(2.0))
 FROM SYSIBM.SYSDUMMY1;

より低いAPPLCOMPATレベルでは、 Db2 、このような状況で-802を発行する。

取るべきアクション 返されたSQLCODEがエラーから警告に変更されたことを考慮して、エラー処理を調整してください。 IFCID 0376 のトレースを有効にした場合、トレース出力の QW0376FN フィールドにあるファンクション識別子 '1201' の値は、この変更によって影響を受ける可能性のあるアプリケーションを特定します。

CAST (string AS TIMESTAMP) 結果が変わる

APPLCOMPAT レベル V11R1 以降では、CAST (string AS TIMESTAMP) の結果が変更される場合があります。 つまり、8バイト文字列または13バイト文字列がCAST (string AS TIMESTAMP)に入力されると、 Db2 、入力文字列はTIMESTAMP値の文字列表現として解釈される。 CAST (string AS TIMESTAMP) の 8 バイトまたは 13 バイト文字列の表現が無効な場合、SQLCODE -180 エラーが発生します。 例えば、次の最初のSELECT文の結果は 2013-01-01-00.00.00.000000、これは正しい結果である。 2番目のSELECT文の結果はSQLCODE -180エラーです。これは、Store Clock値がCAST (string AS TIMESTAMP)の有効な入力ではないためです。

-- SET APPLICATION COMPATIBILITY TO V11R1
SET CURRENT APPLICATION COMPATIBILITY='V11R1';
-- CAST AN 8-BYTE STRING REPRESENTATION OF A DATETIME VALUE
-- TO TIMESTAMP
SELECT CAST('1/1/2013' AS TIMESTAMP) FROM SYSIBM.SYSDUMMY1;
-- CAST AN 8-BYTE STRING REPRESENTATION OF A STORE CLOCK VALUE
-- TO TIMESTAMP
SELECT CAST(X'CAB5060708090100' AS TIMESTAMP) FROM SYSIBM.SYSDUMMY1;

より低いAPPLCOMPATレベルでは、 Db2 、CAST (string AS TIMESTAMP)を実行すると、 Db2 、8バイト文字列をStore Clock値として、13バイト文字列をGENERATE_UNIQUE値として解釈する。 この解釈では、CAST 指定による結果が正しくないものになる可能性があります。 例えば、最初のSELECT文の結果は 2034-07-25-16.43.41.599503、これは正しくない結果である。 2 つ目の SELECT ステートメントの結果は 2013-01-01-20.37.04.246928 で、入力ストリングがストア・クロック値として解釈される場合はこれは正しい結果です。

-- SET APPLICATION COMPATIBILITY TO V10R1
SET CURRENT APPLICATION COMPATIBILITY='V10R1';
-- CAST AN 8-BYTE STRING REPRESENTATION OF A DATETIME VALUE
-- TO TIMESTAMP
SELECT CAST('1/1/2013' AS TIMESTAMP) FROM SYSIBM.SYSDUMMY1;
-- CAST AN 8-BYTE STRING REPRESENTATION OF A STORE CLOCK VALUE
-- TO TIMESTAMP
SELECT CAST(X'CAB5060708090100' AS TIMESTAMP) FROM SYSIBM.SYSDUMMY1;

対処法 IFCID 0376 のトレースを有効にした場合、トレース出力の QW0376FN フィールドにあるファンクション識別子「1109」値は、この変更によって影響を受ける可能性のあるアプリケーションを特定します。

ストア・クロック値を TIMESTAMP データ・タイプに変換する必要がある場合は、CAST(string AS TIMESTAMP) の代わりに TIMESTAMP 組み込み関数を使用してください。 例えば、以下の文は正しい結果、 2013-01-01-20.37.04.246928 を返す。

-- SET APPLICATION COMPATIBILITY TO V11R1
SET CURRENT APPLICATION COMPATIBILITY='V11R1';
-- CONVERT AN 8-BYTE STRING REPRESENTATION OF A STORE CLOCK VALUE
-- TO TIMESTAMP
SELECT TIMESTAMP(X'CAB5060708090100') FROM SYSIBM.SYSDUMMY1;
CURRENT CLIENTの特殊レジスタ長が増加

APPLCOMPATレベル V11R1 またはそれ以上から、以下の特殊レジスタ値はより大きな長さの値を返す可能性があり、値はサポートされる最大長にパディングされず、末尾の空白は取り除かれる。

特殊レジスター 新しい最大長 以前の最大長 QW0376FN 関数コード
CURRENT CLIENT_ACCTNG 255 バイト 200 バイト '1104'
現在のクライアントアプリ名 255 バイト 32 バイト '1105'
CURRENT CLIENT_USERID 128 バイト 16 バイト '1106'
現在のクライアント名 255 バイト 18 バイト '1107'

対処法 IFCID 0376 のトレースを有効にした場合、トレース出力の QW0376FN フィールドにある以下のファンクションレベル識別 子の値によって、この変更によって影響を受ける可能性のあるアプリケーションが特定されます(前掲の表 に示すとおり):'1104'、'1105'、'1106'、または '1107'。

ダイナミックSQLのRLF実施に伴うASUTIME制限の変更

APPLCOMPAT レベル V11R1 以降では、同じスレッドで複数のパッケージが呼び出される場合、リソース制限機能(RLF)は各パッケージに指定された ASUTIME 制限を実施し、トップレベルの呼び出しパッケージに指定された ASUTIME 制限は考慮されません。 パッケージ内の動的 SQL 文がそのパッケージで指定された制限を超える ASUTIME を使用すると、 Db2 は SQLCODE -905 エラーを返します。 各パッケージに対して制限が適用されるため、アプリケーションはより頻繁にSQLCODE -905エラーを返す可能性があります。

また、各パッケージのAPPLCOMPATレベルは、呼び出すパッケージのAPPLCOMPATレベルに関係なく、新しい動作を制御する。 つまり、RLFは、それ自体がAPPLCOMPATレベル V11R1 またはそれ以上にバインドされているパッケージ内の動的SQL文に指定されたASUTIME制限を、たとえそれが V10R1 でバインドされているパッケージによって呼び出されたとしても強制します。

より低いAPPLCOMPATレベル V10R、 Db2 は、スレッド全体に対するトップレベルの呼び出しパッケージの制限に遭遇した場合にのみ、SQLCODE -905エラーを発行する。

取るべき行動: 動的SQLを使用するルーチンとパッケージのASUTIME制限を見直し、必要に応じて調整する。 IFCID 0376 のトレースを有効にした場合、トレース出力の QW0376FN フィールドにあるファンクション識別子 '1103' の値は、この変更によって影響を受ける可能性のあるアプリケーションを特定します。

XPath処理は、フィルタリングされた結果でエラーが発生したまま続行される

APPLCOMPATレベル V11R1 以降では、XPath処理は、明示的なキャストを含む述語式や、無効な値を含む演算で、より少ないエラーを返すかもしれません。 より少ないエラーを返す可能性が高いXPath式の例には、次のような状況があります:

  • ゼロ除算などの無効な演算の前に、述部によってデータが結果からフィルタリングされる
  • データが非互換データ・タイプに明示的にキャストされる

XPath式の使用については、 XPath式による出力のフィルタリングと XMLデータの選択を参照してください。

取るべき行動: XPath処理を使用するアプリケーションのエラー処理を見直す。 IFCID 0376 のトレースを有効にした場合、トレース出力の QW0376FN フィールドにあるファンクション識別子 '1102' の値は、この変更によって影響を受ける可能性のあるアプリケーションを特定します。

XMLカラムの挿入と更新のために暗黙的に追加されるXMLドキュメント・ノード

APPLCOMPAT V11R1 以降では、アプリケーションがXML列を挿入または更新すると、 Db2 、XMLドキュメントにまだノードが含まれていなければ、暗黙的にXMLドキュメント・ノードが追加されます。

より低い関数レベルでは、アプリケーションが挿入または更新の前にXMLDOCUMENT関数も呼び出さない限り、 Db2 、この状況でSQLCODE -20345エラーが発生します。

取るべき行動: XMLDOCUMENT関数を使用するアプリケーションを見直してください。 IFCID 0376 のトレースを有効にした場合、トレース出力の QW0376FN フィールドにあるファンクション識別子 '1101' の値は、この変更によって影響を受ける可能性のあるアプリケーションを特定します。

変更の終わり