Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編 |
目次
索引
![]() ![]() |
第2章 データベースを処理する応用プログラムの開発の概要 | > 2.1 SQL埋込みCプログラムの作成方法 |
ここでは、SQL埋込みCプログラムに記述するSQL文中の名前の一意性と有効範囲について説明します。
以下の埋込みSQL文をSQL埋込みCプログラムに記述する場合は、注意が必要です。
埋込み例外宣言
ホスト変数
カーソル宣言とホスト変数の関係
埋込み例外宣言で指定したGOTOのホストラベル識別子は、次の同一エラー条件が出現するまで有効となります。
埋込み例外宣言の有効範囲が、複数の関数にまたがる場合は、有効となるすべての関数に、GOTOのホストラベル識別子を記述する必要があります。ホストラベル識別子を関数内に記述していない場合は、翻訳時にエラーとなります。
例
埋込み例外宣言のGOTOのホストラベル識別子が、main関数、sub1関数およびsub2関数で有効となる場合には、それぞれの関数内にGOTOのホストラベル識別子を記述します。
EXEC SQL WHENEVER SQLERROR GOTO :ERR1; main() { EXEC SQL OPEN CUR1 … ;―――*エラー ERR1: ←――* 〜 } long sub1() { EXEC SQL SELECT … ;―――*エラー ERR1: ←――* 〜 } long sub2() { EXEC SQL OPEN CUR2 … ;―――*エラー ERR1: ←――* 〜 }
ホスト変数の名前は、SQL埋込みCプログラムで一意である必要があります。名前が一意でない場合は、翻訳時にエラーとなります。
このため、複数の関数で共通に使うホスト変数、SQLSTATEおよびSQLMSGは、グローバル域に記述する必要があります。
例
複数の関数で共通に使うホスト変数をグローバル域に記述する例を以下に示します。
EXEC SQL BEGIN DECLARE SECTION ;* char SQLSTATE[6] ; | char SQLMSG[256] ; * 複数関数で共通なホスト変数 long common1 ; |の記述 long common2 ; * EXEC SQL END DECLARE SECTION ; main() { EXEC SQL BEGIN DECLARE SECTION ;* long private1 ; | long private2 ; * main関数でだけ使用するホス EXEC SQL END DECLARE SECTION ;|ト変数の記述 } * long sub1() { EXEC SQL BEGIN DECLARE SECTION ;* long private3 ; | long private4 ; * sub1関数でだけ使用するホス EXEC SQL END DECLARE SECTION ;|ト変数の記述 } *
カーソル宣言で使用したホスト変数が評価されるのは、カーソルオープン文の実行時です。このため、複数の関数でホスト変数が指定された同一のカーソルをオープンする場合は、カーソル宣言に指定したホスト変数は、グローバル域に記述する必要があります。
例
カーソル宣言文をグローバル域に記述する例を以下に示します。
EXEC SQL BEGIN DECLARE SECTION ; * char SQLSTATE[6] ; | char SQLMSG[256] ; *複数関数で共通なホスト変数 long common1 ; (2) |の記述 EXEC SQL END DECLARE SECTION ; * EXEC SQL DECLARE CUR1 CURSOR * (1) *複数関数で共通なカーソル宣 FOR SELECT … WHERE NUMBER=:common1 ;*言の記述 (2) main() { EXEC SQL OPEN CUR1 ; 〜 (1) } long sub1() { EXEC SQL OPEN CUR1 ; 〜 (1) }(1) main関数とsub1関数で共通に使うカーソル名
(2) main関数とsub1関数で共通に使うホスト変数名
目次
索引
![]() ![]() |