Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
SQL 記述子領域 (SQLDA) に使用する領域を割り付けます。
ALLOCATE DESCRIPTOR descriptor-name [ WITH MAX { integer | hostvar } ]
descriptor-name : identifier
WITH MAX 句 記述子領域の変数の数を指定できます。デフォルトのサイズは 1 です。さらに、fill_sqlda を呼び出して実際のデータ項目に使用する領域を割り付けてから、フェッチを行ったり、記述子領域内のデータにアクセスする文を実行します。
記述子領域 (SQLDA) に使用する領域を割り付けます。C コードの中で次の宣言を行ってから、この文を使用します。
struct sqlda * descriptor_name
なし
SQL/2008 ALLOCATE DESCRIPTOR 文は、SQL/2008 標準のオプションの SQL 言語機能 B031、"Basic dynamic SQL" の一部です。
次のサンプルプログラムは、ALLOCATE DESCRIPTOR 文の使用例です。
#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; }