ALLOCATE DESCRIPTOR statement [ESQL]

Description

Allocates space for a SQL descriptor area (SQLDA).

Syntax

ALLOCATE DESCRIPTOR descriptor-name
… [ WITH MAX integer | host-variable } ]

Parameters

descriptor-name:

string

For more information, see Chapter 2, “SQL Language Elements” in Reference: Building Blocks, Tables, and Procedures.

Examples

Example 1

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:\\IQ-15_1\\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;
  }
  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;
}

Usage

You must declare the following in your C code prior to using this statement:

struct sqlda * descriptor_name

The WITH MAX clause lets you specify the number of variables within the descriptor area. The default size is 1.

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

See also

DEALLOCATE DESCRIPTOR statement [ESQL]

“The SQL descriptor area (SQLDA)” in SQL Anywhere Server – Programming > SQL Anywhere Data Access APIs > SQL Anywhere embedded SQL