例えば、アプリケーションで、構文的には同じであるが、ユーザーがフォームのフィールド に指定したリテラル値が含まれる INSERT ステートメントを生成するような場合があります。
SQL ステートメントをキャプチャーする前にクライアント最適化プロパティーを設定する場合には、以下の例のように sqlLiteralSubstitution プロパティーを ENABLE に設定します。
pdqProperties=captureMode (ON), pureQueryXml (C:/workspace/capture_file.pdqxml), sqlLiteralSubstitution (ENABLE)
アプリケーションで、次の例の最初のステートメントのような INSERT ステートメントを実行すると、pureQuery は、そのステートメントを次の例の 2 番目のステートメントの形式でキャプチャーします。
insert into EMPLOYEES/*inserting new row into EMPLOYEES table*/values('Dong','Margaret',NULL,60000,12) insert into EMPLOYEES values(?,?,?,?,?)
アプリケーションを実行する前に、capturedOnly プロパティーの値を TRUE に設定し、sqlLiteralSubstitution の設定を ENABLE のままにします。アプリケーションを実行した際に、そのアプリケーションが insert into autoGeneratedKy(name, salary, deptno) values('ABC', 50000, 11 ) というステートメントを実行すると、pureQuery はそのステートメントを pureQueryXML ファイル内のパラメーター化されたバージョンと突き合わせて、それを実行します。
ただし、SQL ステートメントと capture_file.pdqxml 内のパラメーター化された ステートメントとの突き合わせを行わないよう pureQuery に指示することができます。そのような場合には、アプリケーションを実行する前に、sqlLiteralSubstitution を DISABLE に設定します。アプリケーションを 実行した際に、そのアプリケーションが上記のパラグラフの INSERT ステートメントを実行した場合、pureQuery がステートメントを実行するかどうかは、capturedOnly プロパティーの値によって異なります。
以下の表に、sqlLiteralSubstitution プロパティーの 3 つの値とその結果を示します。表には、このプロパティー の値を設定しない場合の結果についても示されています。
値 | 初めてステートメントをキャプチャーする場合の結果 | インクリメンタル・キャプチャーの場合の結果 | アプリケーションを実行した場合の結果 |
---|---|---|---|
ENABLE | pureQuery は、リテラル値をパラメーター・マーカーに置き換えます。 さらに、pureQuery は、元の SQL ステートメント のスタック・トレースをキャプチャーします。pureQuery ですべての元の SQL ステートメントの スタック・トレースをキャプチャーする場合は、maxStackTracesCaptured プロパティーの値を増やす必要があるかもしれません。 pureQuery は、元の SQL ステートメントを maxNonParmSQL プロパティーの値には計上しません。 pureQuery は、SQL ステートメントをパラメーター化できない場合、警告メッセージをログに記録します。 |
結果は、初めて SQL ステートメントをキャプチャーする場合と同じです。 | pureQuery は、SQL ステートメントを pureQueryXML ファイル内の パラメーター化された SQL ステートメントと突き合わせます。 |
DISABLE | pureQuery は、リテラル値をパラメーター・マーカーに置き換えません。 | pureQuery は、リテラル値をパラメーター・マーカーに置き換えません。 | pureQuery は、SQL ステートメントを pureQueryXML ファイル内の パラメーター化された SQL ステートメントと突き合わせません。 |
NOT_SET (または、指定しない) | pureQuery は、リテラル値をパラメーター・マーカーに置き換えません。 | pureQuery が、指定された pureQueryXML ファイルにステートメントを
最後にキャプチャーしたときの値が ENABLE であった場合、pureQuery はリテラル値をパラメーター・マーカー
に置き換えます。 値が DISABLE であった場合、pureQuery はリテラル値をパラメーター・マーカーに置き換えません。 |
指定した pureQueryXML ファイル内のステートメントを pureQuery が前回取り込んだときの値が ENABLE であった場合には、pureQuery は pureQueryXML ファイル内のパラメーター化された SQL ステートメントに SQL ステートメントを一致させようとします。 値が DISABLE であった場合、pureQuery は、pureQueryXML ファイル内のパラメーター化された SQL ステートメントに SQL ステートメントを一致させようとしません。 |
バージョン 2.2.0.1 以降、pureQuery がリテラル値をパラメーター・マーカーに置き換える際に 2 種類のキャストがサポートされるようになりました。
例えば、ステートメントに節 WHERE mySMALLINTcolumn=CAST(32767999 as INTEGER) が含まれている場合、ステートメントが取り込まれる際に値 32767999 はパラメーター・マーカーになります。
別の例として、CAST 関数 CAST(6 as DECIMAL(3,3)) を使用する場合、ステートメントが取り込まれる際に 6 だけがパラメーター・マーカーになります。
CAST という名前のユーザー定義外部スカラー関数はサポートされません。
変換はデータベース・クライアントで行われるため、この種の SQL ステートメントは、暗黙的キャストをサポートしないデータベース管理システムで実行できます。
pureQuery は、以下のタイプの暗黙的キャストをサポートしています。
select DEPTNAME from DEPARTMENT WHERE DEPTNO = '1' select DEPTNAME from DEPARTMENT WHERE DEPTNO BETWEEN '20' AND '30'
select DEPTNO from DEPARTMENT WHERE DEPTNAME = 123456
INSERT INTO DEPARTMENT VALUES(1,5,56,'000010','A00','aa','2008-09-09')
insert into sales values (5, ?, 9);