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]

此语句用于获取游标当前行一个列的字符串或二进制数据。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, or hostvar
column-num : integer or hostvar
start-offset : integer or hostvar
sqlda-name : identifier
参数
  • COLUMN 子句   column-num 的值从 1 开始,标识要从中读取数据的列。该列必须是字符串或二进制类型。

  • OFFSET 子句   start-offset 指示在字段值中跳过的字节数。通常情况下,该数字是先前已读取的字节数。执行此 GET DATA 语句时读取的字节数由目标主机变量的长度决定。

    目标主机变量的指示符值属短整型,因此不能总是包含截断的字节数。然而,如果字段包含 NULL 值,则该指示符值包含负值;如果值被截断,则包含正值(不一定是截断的字节数);如果非 NULL 值没有截断,则包含零。

    同样,如果 LONG VARCHAR 或 LONG VARCHAR 主机变量的偏移量大于零,则 untrunc_len 字段不会准确地指示截断前的大小。

  • WITH TEXTPTR 子句   如果给出 WITH TEXTPTR 子句,则文本指针检索到第二个主机变量中或 SQLDA 的第二个字段中。该文本指针可用于 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 字段中返回。

注释

从当前游标位置处的行中获取一个列值的片段。游标必须是打开的,并且必须用 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;