Collection Contents Index Using the SQL statement reference ALTER DATABASE statement pdf/chap9.pdf

Reference Manual
   CHAPTER 9. SQL Statements     

ALLOCATE DESCRIPTOR statement [ESQL]


Function 

To allocate space for a SQL descriptor area (SQLDA).

Syntax 

ALLOCATE DESCRIPTOR descriptor-name
... [ WITH MAX { integer | hostvar } ]

Permissions 

None.

Side effects 

None.

See also 

DEALLOCATE DESCRIPTOR statement

The SQL descriptor area (SQLDA)

Description 

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.

Standards and compatibility 

Example 

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:\\asa6\\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;
   }
   type = DT_STRING;   // change the type to string 
   EXEC SQL SET DESCRIPTOR sqlda1 VALUE 2 TYPE = :type;
   fill_sqlda( sqlda1 );  // now we 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;
}

Collection Contents Index Using the SQL statement reference ALTER DATABASE statement pdf/chap9.pdf