GET DIAGNOSTICS

最後に実行された 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 診断レコードに関連付けられる列またはパラメーター番号。これは、どのホスト変数、文字列切り捨て、およびその他の警告が適用されるかを判別するのに便利です。

説明:

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 文の実行に利用できる診断情報はありません。

例:

次のコードは、文の実行後に生成されるすべての診断レコードを表示します。
       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