使用动态 SQL 检索 LONG VARCHAR、LONG NVARCHAR 或 LONG BINARY 值。
前提条件
执行此任务没有前提条件。
根据需要将 sqltype 字段设置为 DT_LONGVARCHAR、DT_LONGNVARCHAR 或 DT_LONGBINARY。
将 sqldata 字段设置为指向 LONGVARCHAR、LONGNVARCHAR 或 LONGBINARY 主机变量结构。
可以使用 LONGVARCHARSIZE(n)、LONGNVARCHARSIZE(n) 或 LONGBINARYSIZE(n) 宏来确定在数组字段中容纳 n 字节的数据而要分配的总字节数。
将主机变量结构的 array_len 字段设置为分配给数组字段的字节数。
使用 FETCH、GET DATA 或 EXECUTE INTO 检索数据。SQL Anywhere 设置以下信息:
* sqlind sqlda 字段在值为 NULL 时为负,在未发生截断时为 0,在发生截断时为未截断值的字节数(不超过 32767 的正数)。
stored_len 数组中存储的字节数。总是小于或等于 array_len 和 untrunc_len。
untrunc_len 值不被截断的情况下数组中将存储的字节数。总是大于或等于 stored_len。如果发生截断,则此值大于 array_len。
例
下面的代码段阐释了使用动态嵌入式 SQL 来检索 LONG VARCHAR 数据的机制。它并不是为实际的应用程序而准备的:
#define DATA_LEN 128000 void get_test_var() { LONGVARCHAR *longptr; SQLDA *sqlda; SQLVAR *sqlvar; sqlda = alloc_sqlda( 1 ); longptr = (LONGVARCHAR *)malloc( LONGVARCHARSIZE( DATA_LEN ) ); if( sqlda == NULL || longptr == NULL ) { fatal_error( "Allocation failed" ); } // init longptr for receiving data longptr->array_len = DATA_LEN; // init sqlda for receiving data // (sqllen is unused with DT_LONG types) sqlda->sqld = 1; // using 1 sqlvar sqlvar = &sqlda->sqlvar[0]; sqlvar->sqltype = DT_LONGVARCHAR; sqlvar->sqldata = longptr; printf( "fetching test_var\n" ); EXEC SQL PREPARE select_stmt FROM 'SELECT test_var'; EXEC SQL EXECUTE select_stmt INTO DESCRIPTOR sqlda; EXEC SQL DROP STATEMENT select_stmt; printf( "stored_len: %d, untrunc_len: %d, " "1st char: %c, last char: %c\n", longptr->stored_len, longptr->untrunc_len, longptr->array[0], longptr->array[DATA_LEN - 1] ); free_sqlda( sqlda ); free( longptr ); } |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |