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; } ... }