表19-2は、この項で説明しているコレクションおよびイテレータ関数を示しています。
表19-2 コレクションおよびイテレータ関数
関数 | 用途 |
---|---|
|
コレクションの最後に要素を追加します。 |
|
あるコレクションを別のコレクションに割り当てます(ディープ・コピーします)。 |
|
指定の要素値 |
|
要素へのポインタを取得します。 |
|
コレクションから要素の配列を取得します。 |
|
コレクションがロケータベースであるかどうかを示します。 |
|
コレクションの最大要素数を戻します。 |
|
コレクションのカレント・サイズ(要素数単位)を取得します。 |
|
コレクションから要素を切り捨てます。 |
|
VARRAY要素をスキャンするためのイテレータを作成します。 |
|
イテレータを削除します。 |
|
カレント・コレクション要素を取得します。 |
|
イテレータを初期化して指定のコレクションをスキャンします。 |
|
次のコレクション要素を取得します。 |
|
前のコレクション要素を取得します。 |
構文
sword OCICollAppend ( OCIEnv *env, OCIError *err, const void *elem, const void *elemind, OCIColl *coll );
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
与えられたコレクションの最後に追加される要素へのポインタです。
要素のNULL
インジケータ情報へのポインタです。elemind
== NULLの場合、追加された要素のNULL
インジケータ情報は、NULL
以外に設定されます。
更新されたコレクションです。
コメント
要素を追加することは、要素ごとにコレクションのサイズを増加させて、最後の要素のデータを指定した要素のデータで更新(ディープ・コピー)することと同等です。この関数では、指定した要素elem
へのポインタは保存されません。つまり、elem
は厳密に入力パラメータになります。
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
割当て元となる右側(ソース)コレクションです。
割当て先となる左側(ターゲット)コレクションです。
コメント
rhs
(ソース)をlhs
(ターゲット)に割り当てます。lhs
コレクションは、rhs
のサイズに応じて変更されます。lhs
コレクションに要素が格納されている場合は、割当てに先立ってその要素が削除されます。この関数はディープ・コピーを実行します。要素用のメモリーはオブジェクト・キャッシュから取られます。
構文
sword OCICollAssignElem ( OCIEnv *env, OCIError *err, sb4 index, const void *elem, const void *elemind, OCIColl *coll );
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
要素の割当て先となる要素の索引です。
要素の割当て元となるソース要素です。
要素のNULL
インジケータ情報へのポインタです。elemind
== NULL
の場合、割り当てられた要素のNULL
インジケータ情報は、NULL
以外に設定されます。
更新されるコレクションです。
構文
sword OCICollGetElem ( OCIEnv *env, OCIError *err, const OCIColl *coll, sb4 index, boolean *exists, void **elem, void **elemind );
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
このコレクション内の要素へのポインタが戻されます。
ポインタが戻される要素の索引です。
指定した索引の要素が存在しない場合はFALSE
に設定されます。それ以外の場合はTRUE
に設定されます。
要素のアドレスが戻されます。
NULL
インジケータ情報のアドレスが戻されます。elemind
== NULL
の場合、NULL
インジケータ情報は戻されません。
コメント
指定の位置にある要素のアドレスを取得します。また、この関数は、オプションで要素のNULL
インジケータ情報のアドレスを戻します。
表19-3に、コレクションの各要素型と対応する要素ポインタの型を示します。要素ポインタはOCICollGetElem()
のelem
パラメータによって戻されます。
表19-3 要素ポインタ
要素型 | *elemの設定 |
---|---|
Oracle |
|
日付( |
|
日時( |
|
時間隔( |
|
可変長文字列( |
|
可変長RAW ( |
|
オブジェクト参照( |
|
LOBロケータ( |
|
オブジェクト型(personなど) |
|
OCICollGetElem()
で戻される要素ポインタは、要素データにアクセスするためだけでなく、代入文のターゲット(左側)として機能するために使用できる書式です。
たとえば、要素型がオブジェクト参照(OCIRef*
)であるコレクションの要素を反復するとします。OCICollGetElem()
のコールにより、参照ハンドル(OCIRef**
)へのポインタが戻ります。コレクション要素へのポインタを取得した後、新しい参照を割り当てることでそれを修正できます。
例19-1に、OCIRefAssign()関数を使用してこれを実行する方法を示します。
例19-1 コレクション要素へのポインタへの新しい参照の割当て
sword OCIRefAssign( OCIEnv *env, OCIError *err, const OCIRef *source, OCIRef **target );
OCIRefAssign()のtarget
パラメータの型はOCIRef**
であることに注意してください。したがってOCICollGetElem()
は、OCIRef**
を戻します。*target
がNULL
の場合は、OCIRefAssign()
によって新しいREF
が割り当てられ、target
パラメータに戻されます。
同様に、コレクション要素がタイプ文字列(OCIString*
)のものである場合、OCICollGetElem()
は文字列ハンドル(つまり、OCIString**
)へのポインタを戻します。OCIStringAssign()またはOCIStringAssignText()を介して新しい文字列を割り当てる場合、ターゲットの型はOCIString **
にしてください。
コレクションの要素型がOracle NUMBER
の場合、OCICollGetElem()
はOCINumber*
を戻します。例19-2に、OCINumberAssign()
コールのプロトタイプを示します。
構文
sword OCICollGetElemArray ( OCIEnv *env, OCIError *err, const OCIColl *coll, sb4 index, boolean *exists, void **elem, void **elemind, uword *nelems );
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
このコレクション内の要素へのポインタが戻されます。
この要素の開始索引です。
指定した索引の要素が存在しない場合はFALSE
に設定されます。それ以外の場合はTRUE
に設定されます。
要求する要素のアドレスが戻されます。
NULL
インジケータ情報のアドレスが戻されます。elemind == NULL
の場合、NULL
インジケータ情報は戻されません。
elem
およびelemind
両方に対するポインタの最大数です。
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
コレクション項目です。
コレクション項目がロケータベースである場合はTRUE
を戻します。それ以外の場合はFALSE
を戻します。
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
要素の数が戻されるコレクションです。有効なコレクション識別子を指し示している必要があります。
コレクション内の現行の要素数です。
コメント
指定されたコレクションの現行の要素数を戻します。ネストした表の場合、要素を削除してもこのカウントは減分されません。したがって、このカウントには要素を削除した際に作成された穴が含まれています。切捨て操作(OCICollTrim())は、切り捨てられた要素の数のみこのカウントを減分します。削除済の要素を差し引いたカウントを取得するには、OCITableSize()を使用します。
次の疑似コードで例をいくつか示します。
OCICollSize(...); // assume 'size' returned is equal to 5 OCITableDelete(...); // delete one element OCICollSize(...); // 'size' returned is still 5
削除済の要素を差し引いたカウントを取得するには、OCITableSize()を使用します。前述の例を続けます。
OCITableSize(...) // 'size' returned is equal to 4
切捨て操作(OCICollTrim())は、切り捨てられた要素の数のみこのカウントを減分します。前述の例を続けます。
OCICollTrim(..,1..); // trim one element OCICollSize(...); // 'size' returned is equal to 4
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
切り捨てる要素数です。
trim_num
要素をコレクションcoll
の最後から削除(解放)します。
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
スキャンするコレクションです。Oracle8i以上では、有効なコレクション型としてVARRAYとNESTED TABLEが含まれています。
割り当てられたコレクション・イテレータのアドレスは、この関数で戻されます。
コメント
イテレータは、オブジェクト・キャッシュの中に作成されます。イテレータは、コレクションの先頭を指し示すように初期化されます。
イテレータの作成直後にOCIIterNext()をコールした場合は、コレクションの最初の要素が戻ります。イテレータの作成直後にOCIIterPrev()をコールした場合は、「コレクションの先頭にいる」ことを示すエラーが戻ります。
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
割り当てられたコレクション・イテレータです。これは戻す前に破棄されNULL
に設定されます。
構文
sword OCIIterGetCurrent ( OCIEnv *env, OCIError *err, const OCIIter *itr, void **elem, void **elemind );
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
現在の要素を指し示すイテレータです。
イテレータが指し示した要素のアドレスが戻されます。
要素のNULL
インジケータ情報のアドレスが戻されます。elem_ind
== NULLの場合、NULL
インジケータ情報は戻されません。
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
スキャンするコレクションです。Oracle8i以上では、有効なコレクション型としてVARRAYとNESTED TABLEが含まれています。
割り当てられたコレクション・イテレータへのポインタです。
構文
sword OCIIterNext ( OCIEnv *env, OCIError *err, OCIIter *itr, void **elem, void **elemind, boolean *eoc);
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
次の要素を指し示すように更新されるイテレータです。
イテレータが次の要素を指し示すように更新された後に戻される、次の要素のアドレスです。
要素のNULL
インジケータ情報のアドレスが戻されます。elem_ind
== NULL
の場合、NULL
インジケータ情報は戻されません。
イテレータがコレクションの最後にある(つまり、次の要素が存在しない)場合はTRUE
、それ以外の場合はFALSE
となります。
構文
sword OCIIterPrev ( OCIEnv *env, OCIError *err, OCIIter *itr, void **elem, void **elemind, boolean *boc );
パラメータ
オブジェクト・モードで初期化されたOCI環境ハンドルです。
OCIエラー・ハンドルです。エラーがある場合は、err
に記録され、OCI_ERROR
が戻されます。OCIErrorGet()をコールして診断情報を取得します。
前の要素を指し示すように更新されるイテレータです。
イテレータが前の要素を指し示すように更新された後に戻される、前の要素のアドレスです。
要素のNULL
インジケータ情報のアドレスが戻されます。elemind
== NULL
の場合、NULL
インジケータ情報は戻されません。
イテレータがコレクションの先頭にある(つまり、前の要素が存在しない)場合はTRUE
、それ以外の場合はFALSE
となります。