ホスト構造

ホスト構造 とは、SQL ステートメントで参照する COBOL のグループ、PL/I、C、C++ の構造、RPG のデータ構造のことをいいます。 Java™ と REXX には、ホスト構造 に相当するものがありません。

ホスト構造は、ホスト言語のステートメントによって定義されます。 これについては、「組み込み SQL プログラミング」トピック集で説明しています。 ここで使用する "ホスト構造" という用語には、SQLCA や SQLDA は含まれません。

ホスト構造参照の形式は、ホスト変数参照の形式と同じです。:S1:S2 の参照は、S1 がホスト構造を指定している場合は、ホスト構造参照です。S1 がホスト構造を指している場合、S2 は、短整数変数、または短整数変数の配列のいずれかでなければなりません。S1 はホスト構造で、S2 はその標識配列です。

ホスト構造は、ホスト変数のリストを参照できる文脈であれば、どのような文脈でも参照できます。ホスト構造の参照は、その構造に含まれている各ホスト変数を、ホスト言語の構造宣言で定義されている順序にしたがって参照するのと同じことです。標識配列の n 番目の変数は、ホスト構造の n 番目の変数の標識変数です。

例えば、C で、V1、V2、および V3 が構造 S1 内の変数として宣言されている場合、

   EXEC SQL FETCH CURSOR1 INTO :S1;

上記のステートメントは、次のステートメントと同等です。

   EXEC SQL FETCH CURSOR1 INTO :V1, :V2, :V3;

ホスト構造に、標識配列より m 個 だけ多い変数がある場合、ホスト構造の最後の m 個 の変数は、標識変数を持ちません。ホスト構造に、標識配列より m 個 だけ少ない変数がある場合、標識配列の最後の m 個 の変数は無視されます。上記の規則は、ホスト構造への参照に標識変数が含まれる場合、またはホスト変数への参照に標識配列が含まれる場合にも当てはまります。標識配列または標識変数を指定しない場合、ホスト構造の変数はいずれも標識変数を持たないことになります。

構造参照に加えて、ホスト構造内の個々のホスト変数、または標識配列内の個々の標識変数は、修飾名によって参照することができます。この修飾の形式は、ホスト ID の後にピリオドと他のホスト ID を付けたものです。最初のホスト ID は、ホスト構造を指し、2 番目のホスト ID は、そのホスト構造内のホスト変数を指していなければなりません。

ホスト変数またはホスト構造参照の形式は、以下のようになります。

構文図を読む構文図をスキップする
>>-:--+------------------+--host-identifier--------------------->
      '-host-identifier.-'                    

>--+---------------------------------------------------------+-><
   | .-INDICATOR-.                                           |   
   '-+-----------+--:--+------------------+--host-identifier-'   
                       '-host-identifier.-'                      

式の中のホスト変数 は、 ホスト変数の宣言に関する規則に従ってプログラムで記述されているホスト変数 (構造ではなく) を識別するものでなければなりません。

次の C サンプルには、ホスト構造、ホスト標識配列、およびホスト変数の参照が示されています。

  struct { char empno[7];
                  struct           { short int firstname_len;
                                     char firstname_text[12];
                                   } firstname;
                  char midint,
                  struct           { short int lastname_len;
                                     char lastname_text[15];
                                   } lastname;
                  char workdept[4];
         } pemp1;
  short ind[14];
  short eind
  struct { short  ind1;
           short  ind2;
         } indstr;

    .....
  strcpy(pemp1.empno,"000220");
  .....
  EXEC SQL
    SELECT *
      INTO :pemp1:ind
      FROM corpdata.employee
      WHERE empno=:pemp1.empno;

上の例では、以下のホスト変数およびホスト構造への参照が有効です。

  :pemp1   :pemp1.empno   :pemp1.empno:eind   :pemp1.empno:indstr.ind1

C、C++、COBOL、PL/I、RPG でホスト構造を参照する方法の詳細については、『組み込み SQL プログラミング』トピック集を参照してください。