Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ プログラミング » Embedded SQL » SQLDA (SQL descriptor area)

 

SQLDA のホスト変数の記述

SQLDA の sqlvar 構造体がそれぞれ 1 つのホスト変数を記述しています。sqlvar 構造体のフィールドの意味を次に示します。

  • sqltype   この記述子で記述している変数の型。

    低位ビットは NULL 値が可能かどうかを示します。有効な型と定数の定義は sqldef.h ヘッダファイルにあります。

    このフィールドは DESCRIBE 文で設定されます。データベースサーバにデータを渡したり、データベースサーバからデータを取り出したりするときに、このフィールドはどの型にでも設定できます。必要な型変換は自動的に行われます。

  • sqllen   変数の長さ。sqllen 値は a_sql_len 型です。長さが実際に何を意味するかは、型情報と SQLDA の使用法によって決まります。

    データ型 LONG VARCHAR、LONG NVARCHAR、LONG BINARY の場合は、sqllen フィールドの代わりに、データ型の構造体 DT_LONGVARCHAR、DT_LONGNVARCHAR、または DT_LONGBINARY の array_len フィールドが使用されます。

  • sqldata   この変数が占有するメモリへのポインタ。このメモリ領域は sqltype と sqllen フィールドに合致させてください。

    UPDATE 文、INSERT 文では、sqldata ポインタが NULL ポインタの場合、この変数は操作に関係しません。FETCH では、sqldata ポインタが NULL ポインタの場合、データは返されません。つまり、sqldata ポインタが返すカラムは、「バインドされていないカラム」です。

    DESCRIBE 文が LONG NAMES を使用している場合、このフィールドは結果セットカラムのロングネームを保持します。さらに、DESCRIBE 文が DESCRIBE USER TYPES 文の場合は、このフィールドはカラムではなくユーザ定義のデータ型のロングネームを保持します。型がベースタイプの場合、フィールドは空です。

  • sqlind   インジケータ値へのポインタ。インジケータ値は a_sql_len 型です。負のインジケータ値は NULL 値を意味します。正のインジケータ値は、この変数が FETCH 文でトランケートされたことを示し、インジケータ値にはトランケートされる前のデータの長さが入ります。conversion_error データベースオプションを Off に設定した場合、-2 の値は変換エラーを示します。

    sqlind ポインタが NULL ポインタの場合、このホスト変数に対応するインジケータ変数はありません。

    sqlind フィールドは、DESCRIBE 文でパラメータタイプを示すのにも使用されます。ユーザ定義のデータ型の場合、このフィールドは DT_HAS_USERTYPE_INFO に設定されます。この場合、DESCRIBE USER TYPES を実行すると、ユーザ定義のデータ型についての情報を取得できます。

  • sqlname   次のような VARCHAR に似た構造体。
    struct sqlname {
       short int  length;
       char  data[ SQL_MAX_NAME_LEN ];
    };

    DESCRIBE 文によって設定され、それ以外では使用されません。このフィールドは DESCRIBE 文のフォーマットによって意味が異なります。

    • SELECT LIST   名前データバッファには SELECT リストの対応する項目のカラム見出しが入ります。

    • BIND VARIABLES   名前データバッファにはバインド変数として使用されたホスト変数名が入ります。無名のパラメータマーカが使用されている場合は、"?" が入ります。

    DESCRIBE SELECT LIST 文では、指定のインジケータ変数にはすべて、SELECT リスト項目が更新可能かどうかを示すフラグが設定されます。このフラグの詳細は、sqldef.h ヘッダファイルにあります。

    DESCRIBE 文が DESCRIBE USER TYPES 文の場合、このフィールドはカラムではなくユーザ定義のデータ型のロングネームを保持します。型がベースタイプの場合、フィールドは空です。

 参照