OBJECT SETおよびOBJECT GETというナビゲーショナル文を使用すると、コレクション属性および定義したオブジェクト型の取出しおよび更新を行うことができます。
次の場合にオブジェクト型の要素に対してOBJECT GET文を実行すると、オブジェクトのすべての属性がホスト変数に取り出されます。
'*' | {attr [, attr]} FROM
句が省略されるかOBJECT GET * FROMが使用される場合。
EXEC SQL [AT [:]database] OBJECT GET [ '*' | {attr [,attr]} FROM] :object [[INDICATOR] :object_ind] INTO {:hv [[INDICATOR] :hv_ind] [,:hv [[INDICATOR] :hv_ind]]} ;
次の場合にOBJECT SET文を実行すると、オブジェクトのすべての属性に対してホスト変数を使用した更新が行われます。
'*' | {attr, [, attr]} OF
句が省略されるかOBJECT SET * OFが使用される場合。
EXEC SQL [AT [:]database] OBJECT SET [ '*' | {attr [, attr]} OF] :object [INDICATOR] :object_ind] TO {:hv [[INDICATOR] :hv_ind] [,:hv [[INDICATOR] :hv_ind]]} ;
関連項目:
OBJECT GET文およびOBJECT SET文の詳細は、オブジェクト属性とC言語のデータ型の変換を参照してください。
この表は、これら2つの文でオブジェクトとコレクション型をどのようにマッピングするかを示しています。
表18-1 オブジェクト属性およびコレクション属性
属性タイプ | 記述 | ホスト・データ型 |
---|---|---|
オブジェクト |
OTT生成の構造体 |
OTT構造体へのポインタ |
コレクション |
OCIArray、OCITable (OCIColl) |
OCIArray *、OCITable * (OCIColl *) |
オブジェクトまたはコレクションは、バインドされる属性と型互換性を持つ必要があります。コレクション属性の型互換性は両方がVARRAYまたはNESTED TABLEのいずれかで、その要素型に互換性がある場合にかぎり保たれます。
次の表は2つのコレクション型の要素でどのように互換性を保てるかを示しています。
表18-2 コレクションおよびホスト配列で可能な型変換
コレクション要素の型 | 記述 | ホスト・データ型 |
---|---|---|
CHAR、VARCHAR、VARCHAR2 |
OCIString |
STRING、VARCHAR、CHARZ、OCIString |
REF |
OCIRef |
OCIRef |
INTEGER、SMALLINT、INT |
OCINumber |
int、short、OCINumber |
NUMBER、NUMERIC、REAL、FLOAT、DOUBLE PRECISION |
OCINumber |
INT、FLOAT、DOUBLE、OCINumber |
DATE |
OCIDate |
STRING、VARCHAR、CHARZ、OCIDate |
REFが参照するオブジェクトは、バインドされるREFと型互換性を持つ必要があります。
これらの表の場合、OBJECT GETでは「記述」列に指定された形式が使用され、左端のデータベース型から「ホスト・データ型」列の形式を使用する内部データ型に変換されます。OBJECT SETでは逆の変換が行われます。
明示的タイプ・チェックはサポートされません
プリコンパイラでは、コレクション要素データ型とホスト変数データ型間のバインド時の、明示的タイプ・チェックはサポートされません。タイプ・チェックは実行時に行われます。