Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Referenzhandbuch » Verwendung von SQL » SQL-Anweisungen » SQL-Anweisungen (A-D)

 

ALLOCATE DESCRIPTOR-Anweisung [ESQL]

Mit dieser Anweisung weisen Sie Speicher für einen SQL-Deskriptorbereich (SQLDA) zu.

Syntax
ALLOCATE DESCRIPTOR Deskriptorname
[ WITH MAX { Ganzzahl | Hostvariable } ]
Deskriptorname : Bezeichner
Parameter
  • WITH MAX-Klausel   Damit können Sie die Anzahl der Variablen innerhalb des Deskriptorbereichs angeben. Die Standardgröße ist eins. Trotzdem müssen Sie fill_sqlda aufrufen, um den eigentlichen Datenelementen Speicherplatz zuzuweisen, bevor Sie einen Aufruf oder eine Anweisung ausführen können, die auf die Daten innerhalb eines Deskriptorbereichs zugreift.

Bemerkungen

Reserviert Speicherplatz für einen Deskriptorbereich (SQLDA). In Ihrem C-Code müssen Sie vor der Verwendung dieser Anweisung Folgendes angeben:

struct sqlda * descriptor_name
Berechtigungen

Keine.

Nebenwirkungen

Keine.

Siehe auch
Standards und Kompatibilität
  • SQL/2003   Kernfunktion.

Beispiel

Das folgende Beispielprogramm enthält ein Beispiel für die Benutzung von ALLOCATE DESCRIPTOR-Anweisungen.

#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 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;
      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;
}