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 3, “SQL Language Elements.”

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:\\ASIQ-12_5\\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 );  // 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

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

See also