スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

1.6.2 ?パラメタ

<この項の構成>
(1) 機能
(2) ?パラメタに渡す値の指定

(1) 機能

UAP実行時に,プログラム中でSQLの文字列を組み立て,そのSQL文字列をPREPARE文で前処理してEXECUTE文,OPEN文,FETCH文,又はCLOSE文で実行したり,EXECUTE IMMEDIATE文で前処理して実行したりする機能があります。この機能で実行するSQLに対しても,UAPから値を渡すことができます。この場合に,PREPARE文で前処理するSQL,又はEXECUTE IMMEDIATE文で前処理して実行するSQLの文字列の中で,UAPから値を渡される箇所に「?」を指定します。この「?」を?パラメタといいます。

(2) ?パラメタに渡す値の指定

?パラメタに渡す値は,PREPARE文に対応するEXECUTE文,OPEN文,FETCH文,CLOSE文,又はEXECUTE IMMEDIATE文のUSING句の埋込み変数で指定します。標識変数はEXECUTE文及びEXECUTE IMMEDIATE文でだけ指定できます。

SQL記述領域を使用しない?パラメタの例を次に示します。

(例)?パラメタの使用例(SQL記述領域を使用しない場合)

(C言語の場合)
      :
EXEC SQL BEGIN DECLARE SECTION;
struct{
long xcmnd_len;
char xcmnd_txt[58];
}xcmnd;
char  XSCODE[5];
char  XSNAME[17];
char  XCOL[3];
long  XTANKA;
long  XZSURYO;
EXEC SQL END DECLARE SECTION;
      :
strcpy(xcmnd.xcmnd_txt,"INSERT INTO ZAIKO VALUES(?,?,?,?,?)");
xcmnd.xcmnd_len = strlen(xcmnd.xcmnd_txt);
EXEC SQL PREPARE ST1 FROM :xcmnd;
 
strcpy(XSCODE,"595M");
strcpy(XSNAME,"ソックス");
strcpy(XCOL,"赤");
XTANKA = 300;
XZSURYO = 200;
EXEC SQL
EXECUTE ST1 USING :XSCODE,:XSNAME,:XCOL,:XTANKA,:XZSURYO;
      :
 

(COBOL言語の場合)
      :
DATA DIVISION.
 
WORKING-STORAGE SECTION.
EXEC SQL
BEGIN DECLARE SECTION
END-EXEC.
01 XCMND.
  02 XCMND-LEN PIC S9(9) COMP VALUE 58.
  02 XCMND-TXT PIC X(58)   VALUE SPACE.
 77 XSCODE   PIC X(4).
 77 XSNAME   PIC N(8).
 77 XCOL    PIC N(1).
 77 XTANKA   PIC S9(9) COMP.
 77 XZSURYO   PIC S9(9) COMP.
 
   EXEC SQL
    END DECLARE SECTION
   END-EXEC.
      :
 PROCEDURE DIVISION.
      :
   MOVE 'INSERT INTO ZAIKO VALUES(?,?,?,?,?)' TO XCMND-TXT.
   EXEC SQL
    PREPARE ST1 FROM :XCMND
   END-EXEC.
 
   MOVE '123S'   TO XSCODE.
   MOVE N'Tシャツ' TO XSNAME.
   MOVE N'赤'    TO XCOL.
   MOVE 200     TO XTANKA.
   MOVE 300     TO XZSURYO.
 
   EXEC SQL
    EXECUTE ST1 USING :XSCODE,:XSNAME,:XCOL,:XTANKA,:XZSURYO
   END-EXEC.
      :