この項では、任意データ・インタフェース関数について説明します。
表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が使用)を戻します。