User's Guide
Part VI. SQL Anywhere Reference
Chapter 43. Watcom-SQL StatementsTo allocate space for a SQL descriptor area (SQLDA).
ALLOCATE DESCRIPTOR descriptor-name
... [ WITH MAX{ integer | hostvar } ]
Embedded SQL.
None.
None.
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
The WITH MAX clause allows you to specify the number of variables within the descriptor area. The default size is one.
You must still call fill_sqlda to allocate space for the actual data items before doing a fetch or any statement that accesses the data within a descriptor area.
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:\\sqlany50\\sample.db");EXEC SQL ALLOCATE DESCRIPTOR sqlda1 WITH MAX 25;EXEC SQL PREPARE :stmt FROM 'select * from employee';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 necessaryEXEC SQL DEALLOCATE DESCRIPTOR sqlda1;EXEC SQL ALLOCATE DESCRIPTOR sqlda1WITH MAX :numcols;}type = DT_STRING; // change the type to stringEXEC SQL SET DESCRIPTOR sqlda1 VALUE 2 TYPE = :type;fill_sqlda( sqlda1 ); // now we allocate space for the variablesEXEC 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;}