在 sqlda 结构(ESQL/C)中保存值

如果在运行时您不知道返回的输出值的数量或其数据类型,则可从 sqlda 结构关联输出值。sqlda 结构罗列一个或多个返回值的数据类型和内存位置。要指定 sqlda 结构作为返回值的位置,请使用 EXECUTE 语句的 INTO DESCRIPTOR 子句。每次 EXECUTE 语句运行时,数据库服务器将 sqlda 结构描述的返回值放在该 sqlda 结构内。

下一个示例使用 sqlda 结构来执行准备好的语句:
struct sqlda *pointer2;
...
sprintf(sel_stmt, "%s %s %s", 
   "select fname, lname from customer",
   "where customer_num =",
   cust_num);
EXEC SQL prepare sel1 from :sel_stmt;
EXEC SQL describe sel1 into pointer2;
EXEC SQL execute sel1 into descriptor pointer2;

sqlda.sqld 值指定 sqlvar 发生次数所描述的输出值的数量。这个数量必须对应于 SELECT 或 EXECUTE FUNCTION(或 EXECUTE PROCEDURE)语句返回的值的数量。

要获取更多信息,请参阅 GBase 8s ESQL/C 程序员手册 中关于 sqlda 的讨论。

这个示例在 GBase 8s ESQL/C 中随同 EXECUTE 语句使用 INTO 子句:
EXEC SQL prepare sel1 from 'select fname, lname from customer
    where customer_num =123';
EXEC SQL execute sel1 into :fname, :lname using :cust_num;
下一示例使用 INTO 子句来返回多行数据:
EXEC SQL BEGIN DECLARE SECTION;
int customer_num =100;
char fname[25];
EXEC SQL END DECLARE SECTION;

EXEC SQL prepare sel1 from 'select fname from customer
    where customer_num=?';
for ( ;customer_num < 200; customer_num++)
    {
    EXEC SQL execute sel1 into :fname using customer_num;
    printf("Customer number is %d\n", customer_num);
    printf("Customer first name is %s\n\n", fname);
    }