ステートメント・レベルのマッチングの照会テキストの取り込み

BIND QUERYコマンドを使用してアクセスパスの選択に影響を与えると、 Db2 が一致するSQLステートメントを特定できる可能性が高くなります。

このタスクについて

Db2 BINDまたはPREPARE時に照合に使用されるステートメントテキストを変更します。 例えば、空白文字、SQL コメント、および EXPLAIN などの特定の文節は照会テキストから削除されます。 これらの変更により、 Db2 はBINDおよびPREPARE処理中の解析されたSQLステートメントを一致させることができるようになりました。

BIND QUERY の時点での以下のアプリケーションのデフォルト値は、静的 SQL ステートメントがバインドされた時点、または動的 SQL ステートメントが準備された時点と同じでなければなりません。

  • CCSID
  • DECIMAL POINT
  • STRING DELIMITER

プロシージャー

ステートメント・テキストを正常にマッチングできるようにするには、以下の方法を使用します。

  • 静的 SQL ステートメントの場合、および DYNAMICRULES(BIND) オプションで準備される動的ステートメントの場合は、DSN_USERQUERY_TABLE 内のステートメントのパッケージ情報を指定する以下の列を指定します。
    • PACKAGE
    • COLLECTION
    • バージョン

    これらの値は必ず必要なわけではありません。 しかし、これらの値が指定されている場合、 Db2 は SYSIBM.SYSPACKSTMT カタログテーブルの解析情報を使用して、ステートメントのテキストを修正します。 値が未指定の場合、またはBIND QUERY処理中に一致するパッケージが見つからない場合、 Db2 はアプリケーションのデフォルトモジュールで指定された値を使用します。

    BIND QUERYプロセスの一環として、 Db2 は、パッケージが指定されている場合、一致するステートメントのテキストが含まれていることを検証します。 ステートメントのテキストが一致しない場合、 Db2 はメッセージを発行し DSNT281I し、BIND QUERYコマンドは失敗します。

    パッケージのバージョンが複数存在する場合は、VERSION 列の値に * を指定します。 Db2 SYSIBM.SYSPACKSTMT カタログテーブルからパッケージ情報を使用し、その中でVERSIONカラムの値が最も小さいものを取得して、ステートメントのテキストを修正します。 パッケージの他のバージョンで異なるオプションを使用する場合は、他のバージョンのステートメントに対するマッチングが失敗する可能性があります。

    パッケージのコンテキストが DSN_USERQUERY_TABLE で指定されていない場合、 Db2 はアプリケーションのデフォルトモジュールを使用してステートメントのテキストを変更します。 しかし、特定のパッケージのステートメントとの照合によるステートメント・テキストの妥当性検査は実行されません。

  • DSN_USERQUERY_TABLE の QUERY_TEXT 列にデータを取り込む場合は、以下のロケーションから構文解析された照会テキストを選択します。
    • 静的 SQL ステートメントでは、DBRM または SYSIBM.SYSPACKSTMT カタログ表からステートメント・テキストを選択します。
    • 動的 SQL ステートメントの場合は、動的ステートメント・キャッシュからステートメント・テキストを選択します。 アンパーサンド記号 (&) によるリテラル値の置換に適格なステートメントの場合は、Db2 がリテラル値を置き換えた後でステートメント・テキストを抽出します。

    INSERT ステートメントには (アプリケーションのソース・コードからコピーするなどして) 直接テキストを指定できます。 ただし、この方法では、ステートメントとヒントが正常にマッチングされる可能性が低くなります。

  • ステートメント・テキスト内のオブジェクト名と SQL キーワードが、(特に動的 SQL ステートメントで) 大文字で指定されていることを確認します。