Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編
目次 索引 前ページ次ページ

第2章 データベースを処理する応用プログラムの開発の概要> 2.1 SQL埋込みCプログラムの作成方法

2.1.9 名前の一意性と有効範囲

ここでは、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関数で共通に使うホスト変数名


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2006