STRUCTURED型UDT(動的なUDTを含む)の属性値にアクセスするには、以下のようにします。
- [オプション]FNC_GetStructuredAttributeCountを呼び出し、UDTにある属性の数を取得します。
- [オプション]FNC_GetStructuredAttributeInfoを呼び出し、UDTにある属性に関する情報(データ型など)を取得します。
- 属性のデータ型に従い、属性値にアクセスします。
属性 結果 LOBを表わすものでない場合 その属性の基礎となる型にマッピングされるCデータ型を使用してバッファを割り当てます。 FNC_GetStructuredAttributeまたはFNC_GetStructuredAttributeByNdxを呼び出すことにより、割り振ったバッファ内に属性の値を入れます。
LOBを表わす場合 その属性のロケータを入れるためのLOB_LOCATORを宣言します。 FNC_GetStructuredInputLobAttributeまたはFNC_GetStructuredInputLobAttributeByNdxを呼び出すことによって、そのLOB_LOCATORを、属性のLOBロケータに設定します。
データを読み取るには、ラージ オブジェクトの値へのアクセスのステップに従います。
FNC_GetStructuredAttributeCount、FNC_GetStructuredAttributeInfo、FNC_GetStructuredAttribute、FNC_GetStructuredAttributeByNdx、FNC_GetStructuredInputLobAttribute、およびFNC_GetStructuredInputLobAttributeByNdxの詳細については、Cライブラリ関数を参照してください。
INTEGERを表わすSTRUCTURED型属性の値にアクセスする方法を示すコードの一部を以下に示します。
void getX( UDT_HANDLE *pointUdt,
INTEGER *result,
char sqlstate[6])
{
INTEGER x;
int nullIndicator;
int length;
/* Get the x attribute of pointUdt. */
FNC_GetStructuredAttribute(*pointUdt, "x", &x, SIZEOF_INTEGER,
&nullIndicator, &length);
if (nullIndicator == -1) {
/* do null handling here */
...
return;
}
...
}