Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
为 SQL 描述符区 (SQLDA) 分配空间。
ALLOCATE DESCRIPTOR descriptor-name [ WITH MAX { integer | hostvar } ]
descriptor-name : identifier
WITH MAX 子句 可用于指定描述符区域内的变量数。缺省大小为 1。在执行读取操作或任何访问描述符区域内数据的语句之前,仍必须调用 fill_sqlda 为实际的数据项分配空间。
为描述符区域 (SQLDA) 分配空间。在使用此语句之前,必须在 C 代码中声明以下内容:
struct sqlda * descriptor_name
无。
SQL/2008 ALLOCATE DESCRIPTOR 是 SQL/2008 标准的可选 SQL 语言功能 B031 "基本动态 SQL" 的一部分。
下面的示例程序包括 ALLOCATE DESCRIPTOR 语句用法的一个示例。
#include <stdio.h> #include <stdlib.h> #include <string.h> EXEC SQL INCLUDE SQLCA; #include "sqldef.h" EXEC SQL BEGIN DECLARE SECTION; int x; short type; int numcols; char string[100]; a_SQL_statement_number stmt = 0; EXEC SQL END DECLARE SECTION; int main(int argc, char * argv[]){ struct sqlda * sqlda1; if( !db_init( &sqlca ) ) { return 1; } db_string_connect( &sqlca, "UID=dba;PWD=sql;DBF=d:\\DB Files\\sample.db"); EXEC SQL ALLOCATE DESCRIPTOR sqlda1 WITH MAX 25; EXEC SQL PREPARE :stmt FROM 'SELECT * FROM Employees'; EXEC SQL DECLARE curs CURSOR FOR :stmt; EXEC SQL OPEN curs; EXEC SQL DESCRIBE :stmt into sqlda1; EXEC SQL GET DESCRIPTOR sqlda1 :numcols=COUNT; // how many columns? if( numcols > 25 ) { // reallocate if necessary EXEC SQL DEALLOCATE DESCRIPTOR sqlda1; EXEC SQL ALLOCATE DESCRIPTOR sqlda1 WITH MAX :numcols; EXEC SQL DESCRIBE :stmt into sqlda1; } type = DT_STRING; // change the type to string EXEC SQL SET DESCRIPTOR sqlda1 VALUE 2 TYPE = :type; fill_sqlda( sqlda1 ); // allocate space for the variables EXEC SQL FETCH ABSOLUTE 1 curs USING DESCRIPTOR sqlda1; EXEC SQL GET DESCRIPTOR sqlda1 VALUE 2 :string = DATA; printf("name = %s", string ); EXEC SQL DEALLOCATE DESCRIPTOR sqlda1; EXEC SQL CLOSE curs; EXEC SQL DROP STATEMENT :stmt; db_string_disconnect( &sqlca, "" ); db_fini( &sqlca ); return 0; }