NESTED TABLEのC言語のデータ型は、OCITableへのポインタです。VARRAYの場合は、OCIArrayへのポインタになります。(両方ともOCICollへのポインタのサブタイプです。)OTT(Object Type Translator)ユーティリティを使用して、アプリケーション・コードにインクルードするヘッダー・ファイルにtypedefを生成します。Object Type Translator (OTT)も参照してください。
コレクションのホスト構造体は記述子で、これを介してコレクションの要素にアクセスできます。この記述子には、実際のコレクション要素は保持されていませんが、その要素へのポインタが格納されています。記述子とその関連要素のためのメモリーは、オブジェクト・キャッシュで入手できます。
オブジェクト型における通常の手順に従って、OTT生成の型ファイルを、Pro*C/C++に対するINTYPEプリコンパイラ・オプション内と、#includeプリプロセッサ・ディレクティブを使用してPro*C/C++プログラムにインクルードされたOTT生成のヘッダー内に指定する必要があります。このスキーマにより、コレクション・オブジェクト・タイプに対する適切なタイプ・チェックがプリコンパイル中に間違いなく実行されます。
ただし、他のオブジェクト型とは異なり、コレクション・オブジェクト・タイプは、OTTによって生成される特別なインジケータ構造体を必要としません。かわりにスカラー・インジケータが使用されます。その理由は、アトミックNULLインジケータのみで十分にコレクション型全体がNULLかどうかがわかるからです。個々のコレクション要素のNULL状態は、(オプションで)各要素に対応する別個のインジケータで表すことができます。
コレクション・オブジェクト・タイプを表すホスト変数は、その他のオブジェクト型の場合と同様に、該当するOTT生成の型へのポインタとして宣言する必要があります。
ただし、コレクション・オブジェクト・タイプ全体を表す標識変数は、その他のオブジェクト型の場合とは異なり、2バイトの符号付きスカラー型OCIInd
として宣言されます。標識変数はオプションで設定しますが、Pro*C/C++で宣言された各ホスト変数に対してそれぞれ1つずつ指定するようにプログラミングすることをお薦めします。
コレクションを操作する方法は2つあります。コレクションを自律型エンティティとして扱い、コレクションの要素へのアクセスが発生しない場合と、コレクションの要素に対するアクセス、追加および切捨てなどが発生する場合です。
Cコレクション記述子(OCITableまたはOCIArray)を使用した場合、コレクション全体を1つのエンティティとして割り当てること以外はできません。OBJECT GET埋込みSQL文を使用すると、コレクションがCホスト変数記述子にバインドされます。OBJECT SET文では、逆にCホスト記述子がコレクションにバインドされます。
1つの文中で複数のコレクションを1つの互換Cコレクション記述子にバインドしたり、コレクションをCコレクション記述子にバインドしている文中で他のスカラーにバインドすることもできます。
関連項目:
アクセスのルールは、自律型アクセスと要素アクセスで異なります。
コレクションは1つの全体として扱われるため、FOR句は使用できません。
NESTED TABLEとVARRAYの定義方法が異なるため、それらの間で代入を行うことはできません。
1つの文中で、複数のコレクションを様々に組み合せてCコレクション記述子に代入することができます。1つの文中で、コレクションをCコレクション記述子に代入したり、他のスカラー・データ型をバインドしたりできます。