如果在运行时您不知道返回的输出值的数量或其数据类型,则可从 sqlda 结构关联输出值。sqlda 结构罗列一个或多个返回值的数据类型和内存位置。要指定 sqlda 结构作为返回值的位置,请使用 EXECUTE 语句的 INTO DESCRIPTOR 子句。每次 EXECUTE 语句运行时,数据库服务器将 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 的讨论。
EXEC SQL prepare sel1 from 'select fname, lname from customer where customer_num =123'; EXEC SQL execute sel1 into :fname, :lname using :cust_num;
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); }