この項では、任意データ・インタフェース関数について説明します。
表21-4 任意データ関数
関数 | 用途 |
---|---|
|
|
|
|
|
現行の位置にある属性に指定の値を設定します。 |
|
指定の継続時間に対して |
|
現行の属性位置にある |
|
現行の位置にある |
|
指定のデータ値を使用して |
|
AnyDataを解放します。 |
|
|
|
|
|
AnyData値に対応する型を取得します。 |
|
|
|
AnyData値の |
用途
OCIAnyData
のデータ値を取り出します。データ値です。OCIAnyData
の初期化で使用された型です。このコールを使用すると、OCI_TYPECODE_OBJECT
型、任意のコレクション型または任意の組込みの型など、OCIAnyData
全体にアクセスできます。
構文
sword OCIAnyDataAccess ( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata, OCITypeCode tc, OCIType *inst_type, void *null_ind, void *data_value, ub4 *length );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
OCIAnyData
への初期化済ポインタです。
データ値の型コードです。この型コードを使用して型をチェックします(OCIAnyData
が初期化された型)。
データ値のOCIType
です(基本形でない場合)。tc
パラメータが次のいずれかの場合、このパラメータはNULLにできません。
OCI_TYPECODE_OBJECT
OCI_TYPECODE_REF
OCI_TYPECODE_VARRAY
OCI_TYPECODE_TABLE
このパラメータはNULL
にしないでください。これ以外のパラメータの場合は、NULL
でもかまいません。
data_value
がNULL
かどうかを示します。OCI_TYPECODE_OBJECT
以外のすべての型コードについて、(OCIInd *)
を渡します。戻される値は、値がNULL
以外の場合はOCI_IND_NOTNULL
に、値がNULL
の場合はOCI_IND_NULL
になります。型コードがOCI_TYPECODE_OBJECT
の場合は、data_value
のインジケータ構造体へのポインタがここの引数として渡されます。詳細は、「OCIAnyDataAttrGet()」を参照してください。
データ値です(OCIAnyData
の初期化で使用された型になります)。可能な各型コードに対応する適切なC型とこのパラメータに渡される値に応じたメモリー割当て動作については、「OCIAnyDataAttrGet()」を参照してください。
現在、このパラメータは無視されます。今後、このパラメータは、データ表現自体が長さ(バイト単位)を暗黙的に渡さないような特定の型コードに使用される予定です。
用途
OCIAnyData
の現行の位置にある属性の値を取得します。属性値には順次アクセスできます。
構文
sword OCIAnyDataAttrGet ( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata, OCITypeCode tc, OCIType *attr_type, void *null_ind, void *attr_value, ub4 *length, boolean is_any );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
初期化済のOCIAnyData
型へのポインタです。
属性の型コードです。型のチェックは、tc
、attr_type
およびOCIAnyData
の型情報に基づいて行われます。
attr_type
は、参照先の型(OCI_TYPECODE_REF
の場合)、コレクション型(OCI_TYPECODE_VARRAY
、OCI_TYPECODE_TABLE
の場合)またはオブジェクト(OCI_TYPECODE_OBJECT
の場合)の型の記述を指定します。組込みの型コードの場合、このパラメータは必要ありません。
attr_value
がNULL
かどうかを示します。OCI_TYPECODE_OBJECT
以外のすべての型コードについて、(OCIInd *)
をnull_ind
で渡します。
型コードがOCI_TYPECODE_OBJECT
の場合は、ポインタ(void **)
をnull_ind
で渡します。
戻されるインジケータは、値がNULL
以外の場合はOCI_IND_NOTNULL
に、値がNULL
の場合はOCI_IND_NULL
になります。
属性の値です。
現在、このパラメータは無視されます。ここでは、0(ゼロ)を渡してください。今後、このパラメータは、データ表現自体が長さ(バイト単位)を暗黙的に渡さないような特定の型コードに使用される予定です。
属性がOCIAnyData
の形式で戻されるかどうかを示します。
コメント
このコールは、型コードがOCI_TYPECODE_OBJECT
のOCIAnyData
でのみ使用できます。
このコールは、OCIAnyData
の現行の位置にある属性の値を取得します。
tc
は、現行の位置にある属性の型と一致する必要があります。一致しない場合はエラーが戻されます。
is_any
は、属性の型コードが次のいずれかの場合のみ適用できます。
OCI_TYPECODE_OBJECT
OCI_TYPECODE_VARRAY
OCI_TYPECODE_TABLE
is_any
がTRUEの場合、attr_value
はOCIAnyData*
の形式で戻されます。
関数をコールする前に、属性に対してメモリーを割り当てる必要があります。メモリーはOCIObjectNew()
を使用して割り当てることができます。NUMBER
、VARCHAR
などの組込みの型の場合、属性は単なるスタック変数へのポインタである場合があります。次のリストには、オブジェクトの属性型として使用できるOracleデータ型、およびそれに対応して渡される属性値の型が示されています。
表21-5 データ型および属性値
データ型 | attr_value |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
用途
現行の位置にある属性に指定の値を設定します。
構文
sword OCIAnyDataAttrSet ( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata, OCITypeCode tc, OCIType *attr_type, void *null_ind, void *attr_value, ub4 length, boolean is_any );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
初期化済のOCIAnyData
です。
属性の型コードです。型のチェックは、tc
、attr_type
およびOCIAnyData
の型情報に基づいて行われます。
オプションです。
attr_type
は、参照先の型(OCI_TYPECODE_REF
の場合)、コレクション型(OCI_TYPECODE_VARRAY
、OCI_TYPECODE_TABLE
の場合)およびオブジェクト(OCI_TYPECODE_OBJECT
の場合)の型の記述を指定します。組込みの型コードの場合、またはOCI_TYPECODE_NONE
が指定されている場合、このパラメータは必要ありません。
attr_value
がNULL
かどうかを示します。OCI_TYPECODE_OBJECT
以外のすべての型コードについて、(OCIInd *)
を渡します。インジケータは、値がNULL
以外の場合はOCI_IND_NOTNULL
に、値がNULL
の場合はOCI_IND_NULL
になります。
型コードがOCI_TYPECODE_OBJECT
の場合は、attr_value
のインジケータ構造体へのポインタがここの引数として渡されます。
属性の値です。
現在、このパラメータは無視されます。ここでは、0(ゼロ)を渡してください。今後、このパラメータは、データ表現自体が長さを暗黙的に渡さないような特定の型コードに使用される予定です。
属性がOCIAnyData
の形式かどうかを示します。
コメント
OCIAnyDataBeginCreate()
によって、空のスケルトン・インスタンスを持つOCIAnyData
が作成されます。属性値を入力するには、OCIAnyDataAttrSet()
(OCI_TYPECODE_OBJECT
の場合)またはOCIAnyDataCollAttrAddElem()
(コレクション型コードの場合)を使用します。
属性値は、最初の属性から最後の属性まで順に設定する必要があります。現行の属性番号は、OCIAnyData
内部のメンテナンス状態として記憶されています。埋込み属性およびコレクション要素のピース単位の構成はサポートされていません。
このコールによって、現行の位置にある属性にattr_value
が設定されます。OCIAnyData
インスタンスに対するピース単位の構成を開始すると、OCIAnyDataConstruct()
はコールできなくなります。
tc
は、現行の位置にある属性の型と一致する必要があります。それ以外の場合はエラーが戻されます。
is_any
がTRUEの場合、属性はOCIAnyData*
の形式であることが必要で、変換されずに、囲まれたOCIAnyData
(データ)にコピーされます。
次のリストには、オブジェクトの属性型として使用できるデータ型、およびそれに対応して渡される属性値の型が示されています。
表21-6 データ型および属性値
データ型 | attr_value |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
用途
指定の継続時間に対してOCIAnyData
を割り当て、型情報を使用して初期化します。
構文
sword OCIAnyDataBeginCreate ( OCISvcCtx *svchp, OCIError *errhp, OCITypeCode tc, OCIType *type, OCIDuration dur, OCIAnyData **sdata );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
初期化済のOCIAnyData
です。
OCIAnyData
に対応する型コードです。組込みの型コード、または次のようなユーザー定義型の型コードが可能です。
OCI_TYPECODE_OBJECT
OCI_TYPECODE_REF
OCI_TYPECODE_VARRAY
OCIAnyData
に対応する型です。型コードが組込みの型(OCI_TYPECODE_NUMBER
など)に対応している場合、このパラメータはNULL
にできます。ユーザー定義型(OCI_TYPECODE_OBJECT
、OCI_TYPECODE_REF
、コレクション型など)の場合は、NULL
以外になります。
OCIAnyData
が割り当てられる継続時間です。次のいずれかになります。
初期化済のOCIAnyData
です。コールの開始時に(*sdata)
がNULL
でない場合は、OCIAnyData
に領域を再割当てするかわりにメモリーを再使用できます。
したがって、初期化していないポインタをここで渡さないでください。
コメント
OCIAnyDataBeginCreate()
によって、空のスケルトン・インスタンスを持つOCIAnyData
が作成されます。属性値を入力するには、OCIAnyDataAttrSet()
(OCI_TYPECODE_OBJECT
の場合)またはOCIAnyDataCollAttrAddElem()
(コレクション型コードの場合)を使用します。
属性値は順に設定する必要があります。最初の属性から最後の属性に順に設定してください。現行の属性番号は、OCIAnyData
内部のメンテナンス状態として記憶されています。埋込み属性およびコレクション要素のピース単位の構成はサポートされていません。
パフォーマンス向上のために、OCIAnyData
は最終的に、渡されたOCIType
パラメータを指し示します。OCIType
の継続時間が延長されていることの確認は、プログラマの責任で行ってください(OCIType
が一時パラメータの場合は割当て時間 >= OCIAnyData
の継続時間、OCIType
が永続パラメータの場合は割当て/確保継続時間 >= OCIAnyData
の継続時間)。
用途
現行の属性位置にあるOCIAnyData
のコレクション属性に、次のコレクション要素を追加します。OCIAnyData
がコレクション型の場合は、属性位置の概念がなく、このコールでは次のコレクション要素が追加されます。
構文
sword OCIAnyDataCollAddElem ( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata, OCITypeCode collelem_tc, OCIType *collelem_type, void *null_ind, void *elem_value, ub4 length, boolean is_any, boolean last_elem );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
初期化済のOCIAnyData
です。
追加するコレクション要素の型コードです。型のチェックは、collelem_tc
、collelem_type
およびOCIAnyData
の型情報に基づいて行われます。
オプションです。
collelem_type
は、参照先の型(OCI_TYPECODE_REF
の場合)、コレクション型(OCI_TYPECODE_NAMEDCOLLECTION
の場合)およびオブジェクト(OCI_TYPECODE_OBJECT
の場合)の型の記述を指定します。
組込みの型コードの場合、このパラメータは必要ありません。
elem_value
がNULL
かどうかを示します。OCI_TYPECODE_OBJECT
以外のすべての型コードについて、(OCIInd *)
を渡します。インジケータは、値がNULL
以外の場合はOCI_IND_NOTNULL
に、値がNULL
の場合はOCI_IND_NULL
になります。
型コードがOCI_TYPECODE_OBJECT
の場合は、elem_value
のインジケータ構造体へのポインタがここの引数として渡されます。
コレクション要素の値です。
コレクション要素の長さです。
属性がOCIAnyData
の形式かどうかを示します。
追加する要素がコレクション内で最後の要素かどうかを示します。
コメント
このコールは、OCI_TYPECODE_OBJECT
型または任意のコレクション型のOCIAnyData
に対して呼び出すことができます。OCIAnyData
インスタンスに対するピース単位の構成を開始すると、OCIAnyDataConstruct()
はコールできなくなります。
OCIAnyDataAttrSet()
と同様に、is_any
は、collelem_tc
の型コードがOCI_TYPECODE_OBJECT
またはコレクション型コードの場合のみ適用できます。is_any
がTRUE
の場合、属性はOCIAnyData*
の形式であることが必要です。
追加する要素がコレクション内で最後の要素の場合は、last_elem
をTRUE
に設定する必要があります。
NULL
要素を追加するには、NULL
インジケータのnull_ind
をOCI_IND_NULL
に設定します。この場合、他のすべての引数は無視されます。それ以外の場合、null_ind
はOCI_IND_NOTNULL
に設定する必要があります。
可能なすべての型のコレクション要素に渡される属性の型については、「OCIAnyDataAttrSet()」を参照してください。
用途
現行の位置にあるOCIAnyData
のコレクション属性内の要素に順次アクセスします。
構文
sword OCIAnyDataCollGetElem ( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata, OCITypeCode collelem_tc, OCIType *collelem_type, void *null_ind, void *collelem_value, ub4 *length, boolean is_any );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
初期化済のOCIAnyData
です。
取り出すコレクション要素の型コードです。型のチェックは、collelem_tc
、collelem_type
およびOCIAnyData
の型情報に基づいて行われます。
オプションです。
collelem_type
は、参照先の型(OCI_TYPECODE_REF
の場合)、コレクション型(OCI_TYPECODE_NAMEDCOLLECTION
の場合)およびオブジェクト(OCI_TYPECODE_OBJECT
の場合)の型の記述を指定します。
組込みの型コードの場合、このパラメータは必要ありません。
collelem_value
がNULL
かどうかを示します。OCI_TYPECODE_OBJECT
以外のすべての型コードについて、(OCIInd *)
を渡します。インジケータは、値がNULL
以外の場合はOCI_IND_NOTNULL
に、値がNULL
の場合はOCI_IND_NULL
になります。
型コードがOCI_TYPECODE_OBJECT
の場合は、collelem_value
のインジケータ構造体へのポインタ(void **)
がここの引数として渡されます。
コレクション要素の値です。
コレクション要素の長さです。現在は無視されます。入力時には、0(ゼロ)を設定してください。
attr_value
がOCIAnyData
の形式で戻されるかどうかを示します。
コメント
OCIAnyData
データは、トップレベルのコレクションに対応させることもできます。OCIAnyData
がOCI_TYPECODE_OBJECT
型の場合、現行の位置の属性は適切な型のコレクションであることが必要です。それ以外の場合はエラーが戻されます。
OCIAnyDataAttrGet()
と同様に、is_any
パラメータは、collelem_tc
の型コードがOCI_TYPECODE_OBJECT
である場合のみ適用されます。is_any
がTRUE
の場合、attr_value
はOCIAnyData *
の形式であることが必要です。
このコールは、コレクションの終わりに達するとOCI_NO_DATA
を戻します。成功時にはOCI_SUCCESS
を戻し、エラーが発生した場合はOCI_ERROR
を戻します。
可能なすべての型のコレクション要素に渡される属性の型については、「OCIAnyDataAttrGet()」を参照してください。
用途
指定のデータ値を使用してOCIAnyData
を構成します。データ値は指定の型になります。このコールを使用すると、OCI_TYPECODE_OBJECT
型、任意のコレクション型または任意の組込みの型など、OCIAnyData
全体を構成できます。
構文
sword OCIAnyDataConvert ( OCISvcCtx *svchp, OCIError *errhp, OCITypeCode tc, OCIType *inst_type, OCIDuration dur, void *null_ind, void *data_value, ub4 length, OCIAnyData **sdata );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
データ値の型コードです。組込みの型コードまたはユーザー定義型の型コード(OCI_TYPECODE_OBJECT
、OCI_TYPECODE_REF
、OCI_TYPECODE_VARRAY
など)が可能です。
(*sdata
)がNULL
以外で、OCIAnyDataSetAddInstance()のコール時に戻されたスケルトン・インスタンスを表す場合、tc
パラメータおよびinst_type
パラメータは、ここのオプションになります。これは、このようなスケルトン・インスタンスの型情報はすでに認識されているためです。この状況で、tc
パラメータとinst_type
パラメータがここで指定されると、これらのパラメータは型のチェックにのみ使用されます。
OCIAnyData
に対応する型です。型コードが組込みの型(OCI_TYPECODE_NUMBER
など)に対応している場合、このパラメータはNULL
にできます。ユーザー定義型((OCI_TYPECODE_OBJECT
、OCI_TYPECODE_REF
、コレクション型など)の場合は、NULL
以外になります。
OCIAnyData
が割り当てられる継続時間です。次のいずれかになります。
data_value
がNULL
かどうかを示します。OCI_TYPECODE_OBJECT
以外のすべての型コードについて、(OCIInd *)
を渡します。インジケータは、値がNULL
以外の場合はOCI_IND_NOTNULL
に、値がNULL
の場合はOCI_IND_NULL
になります。
型コードがOCI_TYPECODE_OBJECT
の場合は、data_value
のインジケータ構造体へのポインタがここの引数として渡されます。
データ値です。(OCIAnyData
の初期化で使用された型です)。可能な各型コードに対応する適切なC型については、「OCIAnyDataAttrSet()」を参照してください。
現在、このパラメータは無視されます。ここでは、0(ゼロ)を渡してください。今後、このパラメータは、データ表現自体が長さを暗黙的に渡さないような特定の型コードに使用される予定です。
初期化済のOCIAnyData
です。コールの開始時に(*sdata
)がNULL
でない場合は、OCIAnyDataに領域を再割当てするかわりにメモリーを再使用できます。
したがって、初期化していないポインタをここで渡さないでください。
(*sdata
)がOCIAnyDataSetAddInstance()
のコール時に戻されたスケルトン・インスタンスを表す場合、tc
パラメータおよびinst_type
パラメータは、必要に応じて型のチェックに使用されます。
コメント
パフォーマンス向上のため、OCIAnyData
は最終的に、渡されたOCIType
パラメータを指し示します。OCIType
の継続時間が延長されていることの確認は、プログラマの責任で行ってください(OCIType
が一時パラメータの場合は割当て時間 >= OCIAnyData
の継続時間、OCIType
が永続パラメータの場合は割当て/確保継続時間 >= OCIAnyData
の継続時間)。
用途
AnyDataを解放します。
構文
sword OCIAnyDataDestroy ( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
解放するOCIAnyData
型へのポインタです。
用途
OCIAnyData
作成の終わりをマークします。この関数は、インスタンスのすべての属性を適切な値で初期化してからコールしてください。このコールは、OCIAnyData
に対してOCIAnyDataBeginCreate()
がすでにコールされている場合のみ有効です。
構文
sword OCIAnyDataEndCreate ( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *data );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
初期化済のOCIAnyData
です。
用途
OCIAnyData
の現行の属性番号を戻します。OCIAnyData
を構成する場合、この関数は設定する現行の属性を参照します。また、OCIAnyData
にアクセスする場合は、アクセスする属性を参照します。
構文
sword OCIAnyDataGetCurrAttrNum( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *sdata, ub4 *attrnum );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
初期化済のOCIAnyData
です。
属性番号です。
用途
AnyData値に対応する型を取得します。この関数は、OCIAnyData
の内部でメンテナンスされている型への実際のポインタを戻します。パフォーマンス向上のため、コピーは行われません。OCIAnyData
を解放した後(または継続時間が終了した後)、この型を使用しないようにすることは、プログラマの責任で行ってください。
構文
sword OCIAnyDataGetType( OCISvcCtx *svchp, OCIError *errhp, OCIAnyData *data, OCITypeCode *tc, OCIType **type );
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
初期化済のOCIAnyData
です。
OCIAnyData
に対応する型コードです。
OCIAnyData
に対応する型です。OCIAnyData
が組込みの型に対応している場合は、NULL
になります。
用途
OCIAnyData
内の型の内容がNULL
かどうかをチェックします。
構文
sword OCIAnyDataIsNull ( OCISvcCtx *svchp, OCIError *errhp, const OCIAnyData *sdata, boolean *isNull) ;
パラメータ
OCIサービス・コンテキストです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
をコールして診断情報を取得します。
チェックするOCIAnyData
です。
NULL
の場合はTRUE
、それ以外の場合はFALSE
です。
用途
AnyData値のOCITypeCode
をOCIAnyData APIが戻す値の表現に対応するSQLTコードに変換します。
構文
sword OCIAnyDataTypeCodeToSqlt ( OCIError *errhp, OCITypeCode tc, ub1 *sqltcode, ub1 *csfrm) ;
パラメータ
OCIエラー・ハンドルです。エラーがある場合は、errhp
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()
のコールによって診断情報を取得できます。
AnyData値に対応するOCITypeCode
です。
型コードのユーザー・フォーマットに対応するSQLTコードです。
型コードのユーザー・フォーマットに対応するキャラクタ・セット・フォームです。キャラクタ・タイプの場合のみ有効です。(NCHAR型の)SQLCS_IMPLICITまたはSQLCS_NCHARを戻します。
コメント
この関数は、OCI_TYPECODE_VARCHAR2
およびOCI_TYPECODE_CHAR
を、SQLCS_IMPLICITのキャラクタ・セット・フォームでSQLT_VST(OCIStringマッピングに相当する)に変換します。また、OCI_TYPECODE_NVARCHAR2
は、SQLCS_NCHARのキャラクタ・セット・フォームでSQLT_VST(OCIStringマッピングは、OCIAnyData APIが使用)を戻します。