最後に実行された OpenESQL 文の診断情報を取得できます。
制限事項:本トピックは、Windows 環境 (ローカル開発) にのみ該当します。
構文:
>>---EXEC SQL---GET-.---------.-DIAGNOSTICS-->
+-CURRENT-+
+-----------,--------------+
V |
>-----.-.- :hvar1 = --.-ROW_COUNT--.->
| | |
| +-NUMBER-----+
|
| +-----------------,------------------+
| V |
+--CONDITION--condition-.-:hvar2 = --.-DB2_RETURNED_SQLCODE--.->
| |
+---RETURNED_SQLCODE----+
| |
+---RETURNED_SQLSTATE---+
| |
+---MESSAGE_TEXT--------+
| |
+---DB2_ROW_NUMER-------+
| |
+---ROW_NUMBER----------+
| |
+---COLUMN_NUMBER-------+
>---END-EXEC---><
パラメーター:
hvar1 |
文レベルの診断情報項目を受け取るホスト変数。 |
condition |
診断情報の取得元となる診断レコードを指定するリテラルまたはホスト変数。 |
hvar2 |
文レベルの診断情報項目を受け取るホスト変数。 |
ROW_COUNT |
前の文に影響される行の数。INSERT、UPDATE、または DELETE では、それぞれ挿入、更新、または削除される行の数になります。FETCH では、アプリケーションに返される行の数になります。これは数値ホスト変数の形で取得される必要があり、通常は 32 ビット整数です。 |
NUMBER |
後続の GET DIAGNOSTICS 文でクエリ実行の対象となる診断レコードの数。これは数値ホスト変数の形で取得される必要があり、通常は 32 ビット整数です。 |
DB2_RETURNED_SQLCODE |
診断レコードに関連付けられる SQLCODE の値。これは数値ホスト変数の形で取得される必要があり、通常は 32 ビット整数です。 |
RETURNED_SQLCODE |
診断レコードに関連付けられる SQLCODE の値で、DB@_RETURNED_SQLCODE と同じです。これは数値ホスト変数の形で取得される必要があり、通常は 32 ビット整数です。 |
RETURNED_SQLSTATE |
診断レコードに関連付けられる SQLSTATE の値。これは PIC X(n) ホスト変数の形で取得される必要があります。n には任意のサイズが該当しますが、通常は 5 です。 |
MESSAGE_TEXT |
診断レコードに関連付けられるメッセージ テキスト。これは PIC X(n) ホスト変数の形で取得される必要があります。n には任意のサイズが該当します。 |
DB2_ROW_NUMBER |
診断レコードに関連付けられる行番号。これは、パラメーター配列とブロック フェッチを使用する INSERT 文などの複数行操作で使用すると便利です。 |
ROW_NUMBER |
DB2_ROW_NUMBER と同じです。 |
COLUMN_NUMBER |
診断レコードに関連付けられる列またはパラメーター番号。これは、どのホスト変数、文字列切り捨て、およびその他の警告が適用されるかを判別するのに便利です。 |
例:
次のコードは、文が実行された後に生成されるすべての診断レコードを表示します。
01 condNum pic s9(8) comp-5.
01 retSqlCode pic s9(8) comp-5.
01 retMessagetext pic x(120).
01 retSqlState pic x(5).
exec sql get diagnostics :condCount = number end-exec
perform varying condNum from 1 by 1 until condNum > condCount
exec sql
get diagnostics condition :condNum
:retSqlState = RETURNED_SQLSTATE,
:retSqlCode = DB2_RETURNED_SQLCODE,
:retMessageText = MESSAGE_TEXT
end-exec
display retSqlCode ' ' retsqlState ' ' retMessageText
end-perform
説明:
GET DIAGNOSTICS は Windows プラットフォームのみで ODBC に対してのみサポートされます。
OpenESQL 文を実行すると、1 つまたは複数の診断レコードが生成され、実行についての診断情報を記録します。SQLCA は、1 つの診断レコードのみから情報を返すことができます。GET DIAGNOSTICS を使用して、複数のレコードが生成されたかどうかの判定と、個別レコードへのクエリ実行の両方を行うことができます。
ほとんどの場合、文が正常に実行されると、1 つのレコードのみが生成されます。切り捨ての警告が生成された場合または null 値がインジケーター変数をともなわずに返された場合、FETCH 文は取得された列あたり 1 つのレコードを生成する可能性があります。SQL Server のストアド プロシージャが TSQL RAISEERROR 文と COBOL DISPLAY 文を CLR ストアド プロシージャで実行した場合、これらのそれぞれが呼び出し側の診断レコードを生成します。
GET DIAGNOSTICS は、アプリケーションによって宣言される SQLCA または SQLSTATE、SQLCODE に影響を及ぼしません。
GET DIAGNOSTICS 文の実行に利用できる診断情報はありません。