Use this statement to allocate space for a SQL descriptor area (SQLDA).
ALLOCATE DESCRIPTOR descriptor-name [ WITH MAX { integer | hostvar } ]
descriptor-name : identifier
Allocates space for a descriptor area (SQLDA). You must declare the following in your C code prior to using this statement:
struct sqlda * descriptor_name |
None.
None.
SQL/2003 Core feature.
The following sample program includes an example of ALLOCATE DESCRIPTOR statement usage.
#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; } |
Discuss this page in DocCommentXchange. Send feedback about this page using email. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |