UDFまたはUDMの戻り値であると定義されているか、または外部ストアド プロシージャに対するINOUTまたはOUTパラメータであると定義されている、STRUCTURED型のLOB属性のロケータを戻します。
構文
void FNC_GetStructuredResultLobAttributeByNdx ( UDT_HANDLE udtHandle, int *attributeIndex, LOB_RESULT_LOCATOR *object )
構文要素
- udtHandle
- 以下のいずれかとして定義されているSTRUCTURED型UDTへのハンドル。
- UDFまたはUDMの戻り値、あるいは外部ストアド プロシージャに対するINOUTまたはOUTパラメータ。
- UDFまたはUDMのSTRUCTURED型UDT戻り値のネストされた属性、あるいは外部ストアド プロシージャに対するINOUTまたはOUTパラメータ。
- attributeIndex
- UDT内のネストされていないLOB属性のインデックス。
値の範囲は0からi-1です。0はUDTの最初の属性のインデックスであり、iはUDTの最上位レベルの属性の数です。
例えば、次の2つの属性を持つ、passportUDTと呼ばれるSTRUCTURED型UDTがあるとします。最初の属性は、IDと呼ばれるINTEGER属性であり、2番目の属性はphotoと呼ばれるLOB属性です。photo属性のロケータを取得するには、インデックス1を使用します。
- object
- LOB属性のLOBロケータを指すポインタ。
使用上の注意
FNC_GetStructuredResultLobAttributeByNdxを使用すると、LOB型を表わすDISTINCT型属性のLOBロケータを取得することができます。
STRUCTURED型の属性のLOBロケータを取得した後、FNC_LobOpenなどのLOBアクセス関数を使用して、データを付加します。
デフォルトでは、外部ルーチンから戻されたSTRUCTURED型UDTの場合、そのすべての属性(STRUCTURED型UDTである属性を除く)は、NULLに設定されています。外部ルーチンが、STRUCTURED型のLOB属性に対して何もデータを付加しないと、その属性はNULLのままになります。
パラメータ スタイルSQLを使用する外部ルーチンの場合に、結果標識引数を-1に設定すると、LOB属性に付加されたデータはすべて破棄されます。結果標識引数を-1に設定しない場合、LOB属性にデータを付加した外部ルーチンにおいて、LOB属性を元のNULLにリセットすることはできません。
LOBに何もデータを付加しない場合、外部ストアド プロシージャへのINOUTパラメータであると定義されているSTRUCTURED型のLOB属性は、その入力バージョンがそのまま保たれます。
CLIv2を使用してSQLを実行する外部ストアド プロシージャは、未処理のCLIv2リクエストが完了するまで、この関数を呼び出すことはできません。
UDFまたはUDMの戻り値であると定義されているか、あるいは外部ストアド プロシージャに対するINOUTまたはOUTパラメータであると定義されている、STRUCTURED型UDTのネストされたLOB属性のロケータを取得するには、以下のようにします。
- FNC_GetStructuredAttributeByNdxを呼び出して、ターゲット属性へのパス内の次のSTRUCTURED型UDT属性のUDTハンドルを取得します。
このステップを繰り返し、udtHandle引数として新しく取得したUDTハンドルでnを-2回渡します。nは、ターゲット属性のネスト レベルです。
- FNC_GetStructuredResultLobAttributeByNdxを呼び出し、ターゲットLOB属性を含むSTRUCTURED型UDT属性のUDTハンドルで渡します。
FNC_GetStructuredResultLobAttributeByNdxの使用例
void document_t_lowerCase( UDT_HANDLE *documentUdt, UDT_HANDLE *resultDocumentUdt, char sqlstate[6]) { LOB_RESULT_LOCATOR resultDocLoc; /* Get a LOB_RESULT_LOCATOR for the result doc attribute. */ FNC_GetStructuredResultLobAttributeByNdx(*resultDocumentUdt, 0, &resultDocLoc);