ASA SQL Reference
SQL Statements
Use this statement to allocate space for a SQL descriptor area (SQLDA).
ALLOCATE DESCRIPTOR descriptor-name
[ WITH MAX { integer | hostvar } ]
descriptor-name : string
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.
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.
DEALLOCATE DESCRIPTOR statement [ESQL]
The SQL descriptor area (SQLDA)
SQL/92 Entry-level feature.
SQL/99 Core feature.
Sybase Supported by Open Client/Open Server.
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 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 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; }