Symfoware Server アプリケーション開発ガイド(埋込みSQL編) - FUJITSU - |
目次 索引 |
第3章 アプリケーションの作成 | > 3.1 SQL埋込みCプログラムの作成方法 |
ここでは、拡張カーソル名で指定されたカーソルの使用方法について説明します。
ALLOCATE CURSOR文を使用して宣言したカーソルを拡張カーソルといいます。
拡張カーソルは、ALLOCATE CURSOR文に拡張カーソル名および拡張SQL文識別子を指定して定義します。拡張カーソル名は、文字列型のホスト変数を使用して定義し、アプリケーションの実行時に値を動的に設定します。
拡張カーソル名は、以下のSQL文に指定できます。
ALLOCATE CURSOR文
動的CLOSE文
動的DELETE文:位置づけ
動的FETCH文
動的OPEN文
動的UPDATE文:位置づけ
拡張カーソル名を使用すると、ホスト変数を指定することによりカーソルの名前を実行時に動的に指定することが可能になるため、複数のカーソルを宣言する場合にカーソル宣言をまとめることができます。
そのため、多数のカーソルを操作するアプリケーションでも、開発量の削減を実現できます。
拡張カーソル名ではなくカーソル名を使用すると、カーソルの名前をSQL文中に識別子として文字列で指定するため、複数のカーソルを宣言する場合は、使用するカーソルの数だけカーソル宣言を記述する必要があります。
また、カーソルを操作する場合は、個々のカーソル名を記述したSQL文を記述しなければなりません。
そのため、多数のカーソルを使用するアプリケーションは、その開発規模が大きくなってしまいます。
拡張カーソル名を使用した場合とカーソル名を使用した場合で、複数のカーソルを宣言する例を以下に示します。
例1
拡張カーソル名を使用して、複数のカーソルを宣言する例を示します。
: for ( loop=0; loop<nn; loop++ ) { EXEC SQL PREPARE :cmd FROM :strsql; (1) EXEC SQL ALLOCATE :cur1 CURSOR FOR :cmd1; (2) } :
(1)拡張SQL文識別子を使用して、ループによりnn個の準備可能文を準備します。
(2)拡張カーソル名を使用して、ループによりnn個のカーソルを宣言します。
例2
カーソル名を使用して、複数のカーソルを宣言する例を示します。
: EXEC SQL BEGIN DECLARE SECTION; VARCHAR strsql[256]; EXEC SQL END DECLARE SECTION; : EXEC SQL PREPARE CMD1 FROM :strsql; (1) EXEC SQL PREPARE CMD2 FROM :strsql; (1) EXEC SQL PREPARE CMD3 FROM :strsql; (1) : : EXEC SQL PREPARE CMDnn FROM :strsql; (1) : EXEC SQL DECLARE CUR1 CURSOR FOR CMD1; (2) EXEC SQL DECLARE CUR2 CURSOR FOR CMD2; (2) EXEC SQL DECLARE CUR3 CURSOR FOR CMD3; (2) : : EXEC SQL DECLARE CURnn CURSOR FOR CMDnn; (2) : : :(1)SQL文識別子CMD1〜CMDnnを定義します。
(2)SQL文識別子CMD1〜CMDnnに対し、カーソルCUR1〜CURnnを宣言します。
拡張カーソル名の有効範囲はセションになります。
そのため複数のコンパイル単位にまたがって使用することができ、拡張カーソル名を使用するSQL文ごとにカプセル化し、共有することが可能です。
例
複数のコンパイル単位にまたがった拡張カーソルの使用例を示します。パラメタcursor_nameに'CUR1'が指定されたとします。sub_pre.sc
short sub_pre( char *command_name ) { : EXEC SQL BEGIN DECLARE SECTION; VARCHAR cmd1[36]; VARCHAR strsql[256]; EXEC SQL END DECLARE SECTION; : strcpy(cmd1.sqlvar, command_name); cmd1.sqllen = strlen(cmd1.sqlvar); EXEC SQL PREPARE :cmd1 FROM :strsql; (1) : }(1)ホスト変数cmd1を使用して拡張SQL文識別子を定義します。
sub_alloc_cur.sc
short sub_alloc_cur( char *command_name, char *cursor_name ) { : EXEC SQL BEGIN DECLARE SECTION; VARCHAR cur1[36]; VARCHAR cmd1[36]; EXEC SQL END DECLARE SECTION; : strcpy(cmd1.sqlvar, command_name); cmd1.sqllen = strlen(cmd1.sqlvar); strcpy(cur1.sqlvar, cursor_name); cur1.sqllen = strlen(cur1.sqlvar); EXEC SQL ALLOCATE :cur1 CURSOR FOR :cmd1; (1) :(1)拡張カーソル名cur1と拡張SQL文識別子cmd1を使用して拡張カーソルを宣言します。
sub_open.sc
short sub_open( char *cursor_name ) { : EXEC SQL BEGIN DECLARE SECTION; VARCHAR cur1[36]; EXEC SQL END DECLARE SECTION; : strcpy(cur1.sqlvar, cursor_name); cur1.sqllen = strlen(cur1.sqlvar); EXEC SQL OPEN :cur1; (1) :(1)拡張カーソルCUR1をオープンします。
目次 索引 |