C および C++ でのホスト変数配列

C および C++ プログラムでは、数値、文字、グラフィック、バイナリー、LOB、XML、および ROWID のホスト変数配列を指定できます。 また、LOB ロケーター、および LOB と XML のファイル参照変数を指定することもできます。

ホスト変数配列は、以下のコンテキストでは単純な参照としてのみ参照できます。 構文図では、ホスト変数配列 は、ホスト変数配列への参照を指定します。

  • 複数行のフェッチのための FETCH ステートメント内。 FETCH文を参照。
  • INSERT文のFOR n ROWS 形式で、ソースデータにホスト変数配列を使用します。 INSERT文を参照してください。
  • ソース・データの行が複数ある MERGE ステートメント内。 MERGE文を参照してください。
  • EXECUTE文で、INSERT文またはMERGE文の動的 FOR n ROWS形式のパラメータマーカーに値を指定する。 EXECUTE文を参照。

変更の開始サポートされていない他のコンテキストでアプリケーションがホスト変数配列を参照した場合、 Db2 は SQLCODE -312 エラーを返します。変更の終わり

制約事項:
  • 有効なホスト変数配列宣言は、有効な C 宣言の一部のみです。 変数配列の宣言が無効な場合に、 その変数配列を参照する SQL ステートメントがあると、 メッセージ UNDECLARED HOST VARIABLE ARRAY が出される場合があります。
  • C および C++ のいずれの場合も、 複数行の INSERT、FETCH、および MERGE ステートメントで使用する次の配列のための構造宣言で、_packed 属性は指定できません。
    • 可変長文字配列
    • 可変長グラフィック配列
    • LOB 配列
    さらに、これらの配列を複数行ステートメントで使用する予定の 場合、#pragma pack(1) ディレクティブは有効になりません。

数値ホスト変数配列

次の図は、数値ホスト変数配列を宣言するための構文を示しています。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticconstvolatileunsignedfloatdoublelongshortintlong longintdecimal(precision,位取り (scale))_Decimal32_Decimal64_Decimal128,変数名[ディメンション1]={,} ; 
注:
  • 1 次元は 1 ~ 32767 の範囲の整数定数である必要があります。

以下の例は、数値ホスト変数配列の宣言を示しています。

EXEC SQL BEGIN DECLARE SECTION;
    /* declaration of numeric host-variable array */
    long serial_num[10];
    ...
EXEC SQL END DECLARE SECTION;

文字ホスト変数配列

次のフォーマットの文字ホスト変数配列を指定できます。

  • NUL 終止符文字形式
  • VARCHAR 構造書式
  • CLOB

以下の図は、CLOB 以外の各形式の構文を示しています。

下図は、 NUL 終了文字のホスト変数配列を宣言するための構文を示しています。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticconstvolatileunsignedchar ,変数名[ディメンション1][長さ]={,} ;23
注:
  • 1 次元は 1 ~ 32767 の範囲の整数定数である必要があります。
  • 2 この変数に割り当てられる文字列はすべて、NUL文字で終了していなければなりません。 この変数から取り出されるストリングは NUL 終止符です。
  • 3 NUL文字で終端するホスト変数配列の文字列は、可変長の文字列(NUL文字を除く)にマッピングされます。

次の図は、可変長文字ホスト変数配列を宣言するための構文を示しています。可変長文字 ( VARCHAR ) 型構造化形式を使用します。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticconstvolatilestruct1  { shortintvar-12  ; unsignedcharvar-23 [長さ]  ;  }  ,変数名[ディメンション4]={,} ;
注:
  • 1 structタグを使用して他の変数を定義することはできますが、それらをSQLのホスト変数配列として使用することはできません。
  • 2 var-1 スカラー数値変数でなければなりません。
  • 3 var-2 スカラーのCHAR配列変数でなければなりません。
  • 4 次元は 1~32767の範囲の整数定数でなければなりません。

下例は、 VARCHAR ホスト変数配列の有効または無効な宣言を示しています。

EXEC SQL BEGIN DECLARE SECTION;
    /* valid declaration of VARCHAR host-variable array */
    struct VARCHAR {
      short len;
      char s[18];
      } name[10];

/* invalid declaration of VARCHAR host-variable array */
   struct VARCHAR name[10];

2 進ホスト変数配列

下図は、バイナリー・ホスト変数配列を宣言するための構文を示しています。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticregisterconstvolatileSQL TYPE ISBINARYVARBINARY( 長さ) ,変数名[ディメンション1] ;
注:
  • 1 次元は 1 ~ 32767 の範囲の整数定数である必要があります。

グラフィック・ホスト変数配列

以下のフォーマットのグラフィック・ホスト変数配列を指定できます。

  • NUL 終止符グラフィック形式
  • VARGRAPHIC 構造化形式
推奨 :グラフィックおよび vargraphic ホスト変数配列を定義する際に C データ型 wchar_t を使用する代わりに、以下のいずれかのテクニックを使用してください
  • 次の typedef ステートメントを使用して、sqldbchar データ・タイプを定義する。
    typedef unsigned short sqldbchar;
  • Db2に提供されるヘッダー・ファイル内の typedef ステートメントで定義されている sqldbchar データ型を使用してください。
  • C データ・タイプ unsigned short を使用する。

下図は、 NUL 終了グラフィック・ホスト変数配列を宣言するための構文を示しています。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticconstvolatileunsignedsqldbchar ,変数名[ディメンション1][長さ2]={,}  ; 34
注:
  • 1 次元は 1 ~ 32767 の範囲の整数定数である必要があります。
  • 2 の長さは、1より大きく16352より小さい十進整数定数でなければなりません。
  • 3 この変数に割り当てられる文字列は、すべてNUL文字で終了していなければなりません。 この変数から取り出されるストリングは NUL 終止符です。
  • 4 NUL文字で終了するグラフィックホスト変数配列にシングルバイト文字を割り当てないでください

次の図は、 VARGRAPHIC 構造化フォームを使用するグラフィック・ホスト変数配列を宣言するための構文を示しています。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticconstvolatilestruct1  { shortintvar-12  ; unsignedsqldbcharvar-23 [長さ4 ] ;  }  ,変数名[ディメンション5]={,} ;
注:
  • 1 structタグを使用して他の変数を定義することはできますが、それらをSQLのホスト変数配列として使用することはできません。
  • 2 var-1 スカラー数値変数でなければなりません。
  • 3 var-2 スカラーの文字配列変数でなければなりません。
  • 4 の長さは、1より大きく16352より小さい十進整数定数でなければなりません。
  • 5 次元は 1~32767の範囲の整数定数でなければなりません。

次の例は、VARGRAPHIC構造化形式を使用するグラフィックホスト変数配列の有効または無効な宣言を示しています。
EXEC SQL BEGIN DECLARE SECTION;
   /* valid declaration of host-variable array vgraph */
   struct VARGRAPH {
      short len;
      sqldbchar d[10];
      } vgraph[20];
 
   /* invalid declaration of host-variable array vgraph */
   struct VARGRAPH vgraph[20];

LOB、ロケーター、およびファイル参照変数配列

次の図は、 BLOB、 CLOB、および DBCLOB のホスト変数配列、ロケーターおよびファイル参照変数を宣言するための構文を示しています。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticregisterconstvolatileSQL TYPE ISBINARY LARGE OBJECTBLOBCHARACTER LARGE OBJECTCHAR LARGE OBJECTCLOBDBCLOB(長さKMG)BLOB_LOCATORCLOB_LOCATORDBCLOB_LOCATORBLOB_FILECLOB_FILEDBCLOB_FILE ,変数名[ディメンション1]={,} ;
注:
  • 1 次元は 1 ~ 32767 の範囲の整数定数である必要があります。

XML ホストおよびファイル参照変数配列

次の図は、 BLOB 、 CLOB、および DBCLOB のホスト変数配列を宣言するための構文と、 XML データ型のファイル参照変数配列を示しています。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticregisterconstvolatileSQL TYPE IS XML ASBINARY LARGE OBJECTBLOBCHARACTER LARGE OBJECTCHAR LARGE OBJECTCLOBDBCLOB(長さKMG)BLOB_FILECLOB_FILEDBCLOB_FILE ,変数名[ディメンション1]={,} ;
注:
  • 1 次元は 1 ~ 32767 の範囲の整数定数である必要があります。

ROWID 変数配列

次の図は、ROWID 変数配列の 宣言の構文です。

構文図を読むビジュアルシンタックスダイアグラムをスキップするautoexternstaticregisterconstvolatileSQL TYPE ISROWID ,変数名[ディメンション1] ;
注:
  • 1 次元は 1 ~ 32767 の範囲の整数定数である必要があります。