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

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 文 » SQL 文 (E ~ O)

 

GET DATA 文 [ESQL]

この文は、カーソルの現在のローの 1 つのカラムに対する文字列またはバイナリ・データを取得するために使用します。GET DATA を使って、LONG BINARY または LONG VARCHAR フィールドをフェッチします。SET 文を参照してください。

構文
GET DATA cursor-name
COLUMN column-num
OFFSET start-offset
[ WITH TEXTPTR ]
USING DESCRIPTOR sqlda-name | INTO hostvar, ... 
cursor-name : identifier, または hostvar
column-num : integer または hostvar
start-offset : integer または hostvar
sqlda-name : identifier
パラメータ
  • COLUMN 句    column-num の値は 1 から始まり、どのカラムのデータがフェッチされるかを示します。そのカラムは、文字列型またはバイナリ型で指定します。

  • OFFSET 句    start-offset は、フィールド値の中でスキップされるバイト数を示します。通常、これは、以前にフェッチされたバイトの数です。この GET DATA 文に対してフェッチされるバイト数は、ターゲットのホスト変数の長さによって決定されます。

    ターゲットのホスト変数のインジケータ値は単精度整数です。このため、インジケータ値にはトランケートされたバイト数が入るとはかぎりません。代わりに、フィールドに NULL 値がある場合は負の値が入り、値がトランケートされた場合は (トランケートされたバイトの数とはかぎりません) 正の値が入ります。また、NULL 値以外の値がトランケートされない場合は、0 が入ります。

    また、LONG VARCHAR または LONG VARCHAR ホスト変数で 0 より大きいオフセットを使用すると、untrunc_len フィールドにはトランケート前のサイズが正確に示されません。

  • WITH TEXTPTR 句    WITH TEXTPTR 句がある場合、テキスト・ポインタが SQLDA の第 2 ホスト変数または SQLDA の第 2 フィールドに取り出されます。このテキスト・ポインタは、Transact-SQL READ TEXT と WRITE TEXT 文と一緒に使えます。テキスト・ポインタは 16 ビットのバイナリ値で、次のように宣言できます。
    DECL_BINARY( 16 ) textptr_var;

    WITH TEXTPTR 句は、長いデータ型 (LONG BINARY、LONG VARCHAR、TEXT、IMAGE) でのみ使用できます。それ以外のデータ型で使用すると、エラー INVALID_TEXTPTR_VALUE が返されます。

    データの合計の長さが、SQLCA 構造体の SQLCOUNT フィールドに返されます。

備考

現在のカーソルの位置でローから 1 つのカラム値を取得します。カーソルを開き、FETCH を使ってローに配置しておいてください。

パーミッション

なし

関連する動作

なし

参照
標準と互換性
  • SQL/2003   ベンダ拡張。

次の例は、GET DATA を使用してバイナリの大規模なオブジェクト (BLOB とも呼ばれます) をフェッチします。

EXEC SQL BEGIN DECLARE SECTION;
DECL_BINARY(1000) piece;
short ind;

EXEC SQL END DECLARE SECTION;
int size;
/* Open a cursor on a long varchar field */
EXEC SQL DECLARE big_cursor CURSOR FOR
SELECT long_data FROM some_table
WHERE key_id = 2;
EXEC SQL OPEN big_cursor;
EXEC SQL FETCH big_cursor INTO :piece;
for( offset = 0; ; offset += piece.len ) {
   EXEC SQL GET DATA big_cursor COLUMN 1
   OFFSET :offset INTO :piece:ind;
   /* Done if the NULL value */
   if( ind < 0 ) break;
   write_out_piece( piece );
   /* Done when the piece was not truncated */
   if( ind == 0 ) break;
}
EXEC SQL CLOSE big_cursor;