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--------+

 >---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 には任意のサイズが該当します。

コメント:

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