DESCRIBE

準備された動的 SQL 文に関する情報を提供し、開いているカーソルの結果セットを記述します。

構文、書き方 1:

>>---EXEC SQL-----DESCRIBE---.----------------------.----->
                             +---SELECT LIST FOR----+
                             +---BIND VARIABLES FOR-+
 
 >--.--prepared_stmt_name--.---INTO---:sqlda_struct---END-EXEC--><

構文、書き方 2:

>>---EXEC SQL-----DESCRIBE---CURSOR---cursor_name----->

 >---INTO---:sqlda_struct---END-EXEC--><

パラメーター:

prepared_stmt_name 準備された SQL SELECT 文または QUERY ODBC 文の名前。
cursor-name 開いているカーソルの名前。
によって異なる。sqlda_struct ポピュレートする出力 SQLDA データ構造体を指定するホスト変数。その他の埋め込み SQL 実装との互換性を保つためにコロンを使用できます。

コメント:

この文は、指定した SQLDA データ構造に、指定した準備された文によって返されるデータ型、長さ、および列名を書き込みます。

SELECT LIST FOR または BIND VARIABLES FOR のどちらも指定しない場合は、SELECT LIST がデフォルトになります。BIND VARIABLES FOR を指定した場合は、結果列に関する情報ではなく、入力パラメーターに関する情報が SQLDA に返されます。

DESCRIBE 文により、列の数が SQLDA 構造体の sqld フィールドに挿入されます。非選択文が準備された場合は、sqld が 0 に設定されます。DESCRIBE を呼び出す前に SQLDA データ構造の次のフィールドをアプリケーションで初期化する必要があります。

sqln 構造体に含めることができる sqlvar (列記述子) 項目の最大数。
sqldabc SQLDA の最大サイズ。
  • 計算方法 (32 ビット) - sqln * 44 + 16
  • 計算方法 (64 ビット) -sqln * 56 + 16

sqln を 0 に設定した場合、列記述子項目は作成されませんが、sqld は必要な項目数に設定されます。DESCRIBE 文は、INTO 句付きの PREPARE 文と似た動作をします。

デフォルトでは、日付、時刻、タイムスタンプに対する SQL タイプは、それぞれ DATE-RECORD、TIME-RECORD、TIMESTAMP-RECORD となります。SQL コンパイラ指令の BEHAVIOR=OPTIMIZED オプションを使用すると、OpenESQL はこれらのデータ型に対してメインフレーム上の DB2 の動作をシミュレートし、標準のデフォルトのレコード構造ではなく文字列 (PIC X(n) など) を返します。

注:ほとんどのドライバーは、DESCRIBE BIND VARIABLES に必要な ODBC 呼び出しを完全には実装していません。

例:

     EXEC SQL INCLUDE SQLDA END-EXEC
     EXEC SQL BEGIN DECLARE SECTION END-EXEC
     01 statement   pic x(80).
     EXEC SQL END DECLARE SECTION END-EXEC

     EXEC SQL
         DECLARE C1 CURSOR FOR stmt1
     END-EXEC

     move "select * from dept" into statement

     move 20 to sqln
    $IF P64 SET
     compute sqldabc = 16 + 56 * sqln
    $ELSE
     compute sqldabc = 16 + 44 * sqln
    $END
     
     EXEC SQL
         PREPARE stmt1 FROM :statement
     END-EXEC
     EXEC SQL 
         DESCRIBE stmt1 INTO :sqlda 
     END-EXEC

* The data structure "sqlda" now contains a description 
* of the dynamic SQL statement.
     EXEC SQL 
         OPEN C1 
     END-EXEC

* Complete the SQLDA, by adding buffer addresses and lengths

     EXEC SQL
         FETCH C1 USING DESCRIPTOR :sqlda
     END-EXEC