Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


8.2.5 埋込みSQL宣言節の不要化

〈この項の構成〉

(1) 概要

プリプロセサでは,/Eオプション(UNIX版の場合は-Eオプション)を指定すると,UAPソースファイル中の任意の箇所で宣言されているSQLのデータ型に対応した変数を,埋込み変数として使用できます。ただし,register記憶クラスの変数は,埋込み変数として使用できません。

変数の有効範囲は,UAPソースファイルを記述しているホスト言語の規則に従います。この機能を使用できるのは,C言語又はCOBOL言語でUAPソースファイルを記述している場合だけです。

この機能を使用すると,次のことができます。

  • 変数宣言を,埋込みSQL開始宣言(BEGIN DECLARE SECTION)及び埋込みSQL終了宣言(END DECLARE SECTION)で囲まなくても,埋込み変数として使用できます。また,併用もできます。

  • 大域変数,局所変数,及び関数の引数の有効範囲を,ホスト言語の文法に従って判定します。埋込み変数の有効範囲が異なれば,同じ名称の変数を宣言しても,異なる埋込み変数として区別されます。この場合,その変数を使用しているSQL文を含む最も内側の変数が指定されたとみなされます。

(2) 使用例

使用例を次に示します。

int fetchdata(long  xtanka){
  char    xscode[5];
  char    xsname[17];
  char    xcol[3];
  long    xgryo;
      :
  EXEC SQL
      DECLARE CR3 CURSOR FOR
         SELECT SCODE,SNAME,COL,ZSURYO
         FROM ZAIKO WHERE TANKA=:xtanka;
      :
  EXEC SQL OPEN CR3 ;
      :
  /*  見出し */
  printf("    *****  在庫表 リスト  *****\n\n");
  printf("    商品コード  商品名            色  単価      現在庫量\n");
  printf("    ----        ----------------  --  --------  --------\n");
 
  EXEC SQL WHENEVER SQLERROR GOTO OWARI;
  EXEC SQL WHENEVER NOT FOUND GOTO OWARI;
 
  /* FETCH */
  for(;;){
      EXEC SQL
          FETCH CR3 INTO :xscode,:xsname,:xcol,:xgryo;
          printf("    %4s      %-16s  %2s  %8d  %8d\n",
                  xscode, xsname, xcol, xtanka, xgryo);
    }
  }
OWARI:


目次