ヘッダーをスキップ
Oracle Call Interfaceプログラマーズ・ガイド
11g リリース1(11.1)
E05677-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

バインド関数、定義関数および記述関数

この項では、バインド関数、定義関数および記述関数について説明します。

表16-4 バインド関数、定義関数および記述関数 

関数 用途

OCIBindArrayOfStruct()


静的配列バインド用のスキップ・パラメータを設定します。

OCIBindByName()


名前によりバインドします。

OCIBindByPos()


位置によりバインドします。

OCIBindDynamic()


OCI_DATA_AT_EXECモードでバインドした後、追加属性を設定します。

OCIBindObject()


名前付きデータ型のバインド用の追加属性を設定します。

OCIDefineArrayOfStruct()


静的配列定義用の追加属性を設定します。

OCIDefineByPos()


出力変数の関連性を定義します。

OCIDefineDynamic()


OCI_DYNAMIC_FETCHモードでの定義用の追加属性を設定します。

OCIDefineObject()


名前付きデータ型の定義用の追加属性を設定します。

OCIDescribeAny()


既存のスキーマ・オブジェクトを記述します。

OCIStmtGetBindInfo()


バインドおよびインジケータ変数名とハンドルを取得します。



OCIBindArrayOfStruct()

用途

このコールは、静的配列バインド用のスキップ・パラメータを設定します。

構文

sword OCIBindArrayOfStruct ( OCIBind     *bindp,
                             OCIError    *errhp,
                             ub4         pvskip,
                             ub4         indskip,
                             ub4         alskip,
                             ub4         rcskip );

パラメータ

bindp (IN/OUT)

バインド構造体へのハンドルです。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

pvskip (IN)

次のデータ値用のスキップ・パラメータです。

indskip (IN)

次のインジケータ値または構造体のためのスキップ・パラメータです。

alskip (IN)

次の実際の長さ値のためのスキップ・パラメータです。

rcskip (IN)

次の列レベルのリターン・コード値のためのスキップ・パラメータです。

コメント

このコールは、静的配列バインドに必要なスキップ・パラメータを設定します。これは、OCIBindByName()またはOCIBindByPos()の後続コールです。初期バインド・コールによって戻されたバインド・ハンドルがOCIBindArrayOfStruct()コールのパラメータとして使用されます。


関連項目:


スキップ・パラメータの詳細は、「OCIでの構造体配列のバインドと定義」を参照してください。

関連関数

OCIBindByName()OCIBindByPos()


OCIBindByName()

用途

プログラム変数とSQL文またはPL/SQLブロック内のプレースホルダを関連付けます。

構文

sword OCIBindByName ( OCIStmt       *stmtp,
                      OCIBind       **bindpp,
                      OCIError      *errhp,
                      const OraText *placeholder,
                      sb4           placeh_len,
                      void          *valuep,
                      sb4           value_sz,
                      ub2           dty,
                      void          *indp,
                      ub2           *alenp,
                      ub2           *rcodep,
                      ub4           maxarr_len,
                      ub4           *curelep,
                      ub4           mode );

パラメータ

stmtp (IN/OUT)

処理中のSQLまたはPL/SQL文への文ハンドルです。

bindpp (IN/OUT)

このコールによって暗黙的に割り当てられるバインド・ハンドルのポインタを保存するポインタです。この特定の入力値に対するバインド情報はすべて、このバインド・ハンドルによってメンテナンスされます。このコールのデフォルトのエンコーディングは、modeパラメータに異なる値がないかぎり、stmtpでのUTF-16の設定に依存します。ハンドルは、文ハンドルの割当てが解除されたときに暗黙的に解放されます。入力時には、このポインタの値はNULLまたは有効なバインド・ハンドルにしてください。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

placeholder (IN)

名前で指定されるプレースホルダです。このプレースホルダは、文ハンドルに関連付けられた文の変数にマップされます。placeholderのエンコーディングは、環境のエンコーディングとの間で一貫性を常に保つ必要があります。つまり、文がUTF-16で準備されているときは、プレースホルダもUTF-16で準備します。文字列型パラメータのように、(text *)としてキャストし、NULLで終了する必要があります。

placeh_len (IN)

エンコーディングに関係なく、placeholderにバイト数で指定された名前の長さです。

valuep (IN/OUT)

データ値へのポインタまたはdtyパラメータで指定された型のデータ値の配列です。OCIAttrSet()関数をコールして、OCI_ATTR_CHARSET_IDOCI_UTF16ID(または非推奨のOCI_UCS2ID)として設定した場合、このデータはUTF-16(以前の名はUCS-2)文字列になることがあります。OCI_UTF16IDは、OCI_UCS2IDに代わる新しい指定です。

さらに、OCIStmtPrepare()で説明したように、ユーザーがOCIAttrSet()をコールして、バインド・ハンドル用に設定された文字を手動でリセットしないかぎり、valuep文字列型のデフォルト・エンコーディングは、OCIEnvNlsCreate()の直前のコールのcharsetパラメータで指定されたエンコーディングになります。

データ値配列は、PL/SQL表にマップする、またはSQL複数行操作用のデータを提供するために指定できます。バインド値配列が提供された場合、これはOCI用語では配列バインドと呼ばれます。

SQLT_NTYまたはSQLT_REFバインドの場合、valuepパラメータは無視されます。OUTバッファへのポインタは、OCIBindObject()によって初期化されるpgvppパラメータ内に設定します。

modeOCI_IOVに設定されている場合は、OCIIOV構造体のベース・アドレスを渡します。

value_sz (IN)

voidポインタvaluepが指し示すデータ値のサイズ(バイト単位)です。バインド・バッファvaluepは、文字列型のこともありますが、長さはバイト数で測定されます。これは、渡されるポインタが(void *)型であるためです。配列バインドの場合、これは、alenpパラメータに指定される実サイズで可能な要素の最大サイズになります。

クライアント・アプリケーションではサイズが不明な記述子、ロケータまたはREFの場合は、プログラマが渡す構造体のサイズ、つまりsizeof(OCILobLocator *)が使用されます。

modeOCI_IOVに設定されている場合は、データ値のサイズを渡します。

dty (IN)

バインドされる値のデータ型です。名前付きデータ型(SQLT_NTY)とREF(SQLT_REF)は、アプリケーションがオブジェクト・モードで初期化されている場合のみ有効です。名前付きデータ型またはREFの場合は、バインド・ハンドルで追加コールを行い、データ型固有の属性を設定する必要があります。

indp (IN/OUT)

インジケータ変数または配列へのポインタです。SQLT_NTY以外のデータ型の場合は、sb2またはsb2の配列へのポインタです。

SQLT_NTYに対しては、このポインタは無視され、インジケータ構造体またはインジケータ構造体配列の実際のポインタが後続のコールOCIBindObject()で初期化されます。このパラメータは、動的バインドでは無視されます。


関連項目:


「標識変数」

alenp (IN/OUT)

配列要素の実際の長さの配列へのポインタです。alenp内の各要素は、実行前後のバインド値配列内の該当要素のデータ長です。text型として渡される文字列の長さはバイト単位にする必要があります。このパラメータは、動的バインドでは無視されます。

rcodep (OUT)

列レベルのリターン・コードの配列へのポインタです。このパラメータは、動的バインドでは無視されます。

maxarr_len (IN)

PL/SQLバインドで可能なタイプdtyの要素の最大数です。このパラメータは、非PL/SQLバインドでは必要ありません。maxarr_lenが0(ゼロ)以外であれば、OCIBindDynamic()またはOCIBindArrayOfStruct()を呼び出して、追加バインド属性を設定できます。

curelep (IN/OUT)

実際の要素の数へのポインタです。このパラメータは、PL/SQLバインドでのみ必要です。

mode (IN)

コーディングの一貫性を保持するため、理論上このパラメータには、OCIStmtPrepare()で使用できる3つの値すべてを設定できます。バインド変数のエンコーディングは、常にこの変数を含む文のエンコーディングと同じであることが必要なため、ユーザーが文のエンコーディングと異なるエンコーディングを指定すると、エラーが発生します。そのため、モード設定は、OCI_DEFAULTにすることをお薦めします。この設定によって、バインド変数に文と同じエンコーディングが設定されます。

次のモードが有効です。

割り当てたバッファは、不要になった際にクライアント側で解放する必要があります。

コメント

このコールは、基本バインド操作を実行するときに使用します。バインドは、プログラム変数のアドレスとSQL文またはPL/SQLブロック内のプレースホルダの関連付けを作成します。このバインド・コールは、バインドされるデータの型も指定し、実行時にデータを提供するメソッドも指示できます。

エンコーディングの決定は、文ハンドルの設定をデフォルトとして使用してバインド・ハンドルで行うか、modeパラメータを明示的に指定してその設定を上書きして行うことができます。


注意:


OCIEnvNlsCreate()を使用して環境ハンドルを作成すると、バインド・ハンドルおよび定義ハンドルの実際の長さと戻される長さは、常にバイト単位になります。

この関数は、bindppパラメータによって指示されたバインド・ハンドルの暗黙的な割当ても行います。**bindppに非NULLポインタが渡されると、このポインタは、OCIHandleAlloc()またはOCIBindByName()のコールで以前に割り当てられた有効なハンドルを指し示します。

OCIアプリケーション内のデータは、プレースホルダに静的または動的にバインドできます。実行の直前にすべてのINバインド・データとOUTバインド・バッファが正しく定義された場合、バインドは静的になります。アプリケーションの要求によって、INバインド・データとOUTバインド・バッファが実行時にクライアント・ライブラリに提供された場合、バインドは動的になります。動的バインドを指定するには、このコールのmodeパラメータをOCI_DATA_AT_EXECに設定します。


関連項目:


動的バインドの詳細は、「OCIでのランタイム・データ割当てとピース単位操作」を参照してください。

OCIBindByName()OCIBindByPos()は、パラメータとしてバインド・ハンドルを取りますが、これはバインド・コールによって暗黙的に割り当てられます。アプリケーションでバインドしているすべてのプレースホルダに別個のバインド・ハンドルが割り当てられます。

特定のデータ型をバインドする際または入力データを特定の方法で処理する際に必要となる特定の属性を指定する場合は、次の追加バインド・コールが必要です。

関連関数

OCIBindDynamic()OCIBindObject()OCIBindArrayOfStruct()


OCIBindByPos()

用途

プログラム変数とSQL文またはPL/SQLブロック内のプレースホルダを関連付けます。

構文

sword OCIBindByPos ( OCIStmt      *stmtp,
                     OCIBind      **bindpp,
                     OCIError     *errhp,
                     ub4          position,
                     void         *valuep,
                     sb4          value_sz,
                     ub2          dty,
                     void         *indp,
                     ub2          *alenp,
                     ub2          *rcodep,
                     ub4          maxarr_len,
                     ub4          *curelep,
                     ub4          mode );

パラメータ

stmtp (IN/OUT)

処理中のSQLまたはPL/SQL文への文ハンドルです。

bindpp (IN/OUT)

このコールによって暗黙的に割り当てられるバインド・ハンドルのアドレスです。この特定の入力値に対するバインド情報はすべて、このバインド・ハンドルによってメンテナンスされます。ハンドルは、文ハンドルの割当てが解除されたときに暗黙的に解放されます。入力時には、このポインタの値はNULLまたは有効なバインド・ハンドルにしてください。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

position (IN)

OCIBindByPos()がコールされている場合、プレースホルダの属性が位置別に指定されます。

valuep (IN/OUT)

データ値のアドレスまたはdtyパラメータで指定されたタイプのデータ値配列です。データ値配列は、PL/SQL表にマップする、またはSQL複数行操作用のデータを提供するために指定できます。バインド値配列が提供された場合、これはOCI用語では配列バインドと呼ばれます。

LOBでは、バッファ・ポインタは、OCILobLocator型のLOBロケータのポインタにする必要があります。ポインタのアドレスを指定します。

SQLT_NTYまたはSQLT_REFバインドの場合、valuepパラメータは無視されます。OUTバッファへのポインタは、OCIBindObject()によって初期化されるpgvppパラメータ内に設定されます。

OCI_ATTR_CHARSET_ID属性がOCI_UTF16ID(下位互換性のために保持されている、非推奨になったOCI_UCS2IDの置換え)に設定されている場合は、対応するバインド・コールとの間で受渡しを行うデータは、すべてUTF-16エンコーディングとみなされます。

modeOCI_IOVに設定されている場合は、OCIIOV構造体のベース・アドレスを渡します。

value_sz (IN)

データ値のサイズ。配列バインドの場合、これは、alenpパラメータに指定される実サイズで可能な要素の最大サイズになります。

クライアント・アプリケーションではサイズが不明な記述子、ロケータまたはREFの場合は、プログラマが渡す構造体のサイズ、たとえばsizeofOCILobLocator *)などが使用されます。

PL/SQLブロックの場合、value_szCHAR列の幅より大きいと、PL/SQLがCHARデータ型を処理する方法のために、エラーが発生します。

modeOCI_IOVに設定されている場合は、データ値のサイズを渡します。

dty (IN)

バインドされる値のデータ型です。名前付きデータ型(SQLT_NTY)とREF(SQLT_REF)は、アプリケーションがオブジェクト・モードで初期化されている場合のみ有効です。名前付きデータ型またはREFの場合は、バインド・ハンドルで追加コールを行い、データ型固有の属性を設定する必要があります。

indp (IN/OUT)

インジケータ変数または配列へのポインタです。すべてのデータ型について、これはsb2またはsb2値の配列へのポインタです。ただ1つの例外はSQLT_NTYです。SQLT_NTYに対してはこのポインタは無視され、インジケータ構造体の実際のポインタまたはインジケータ構造体配列がOCIBindObject()により初期化されます。indpは、動的バインドでは無視されます。valuepOUTパラメータである場合、OCI_IND_NULLを指し示すようにindpを設定する必要があります。


関連項目:


「標識変数」

alenp (IN/OUT)

配列要素の実際の長さの配列へのポインタです。alenp内の各要素は、実行の前後ともに、バインド値配列内の対応する要素のデータ長です(コードポイントの場合は、valuepのデータがUnicodeでないかぎり、バイト単位です)。このパラメータは、動的バインドでは無視されます。valuepOUTパラメータである場合、0(ゼロ)を指し示すようにalenpを設定する必要があります。


注意:


alenpvalue_szより大きい場合、データはスキップされます。

rcodep (OUT)

列レベルのリターン・コードの配列へのポインタです。このパラメータは、動的バインドでは無視されます。

maxarr_len (IN)

PL/SQLバインドで可能なタイプdtyの要素の最大数です。このパラメータは、非PL/SQLバインドでは必要ありません。maxarr_lenが0(ゼロ)以外であれば、OCIBindDynamic()またはOCIBindArrayOfStruct()を呼び出して、追加バインド属性を設定できます。

curelep (IN/OUT)

実際の要素の数へのポインタです。このパラメータは、PL/SQLバインドでのみ必要です。

mode (IN)

このパラメータに有効なモードは次のとおりです。

  • OCI_DEFAULT− これはデフォルト・モードです。

  • OCI_BIND_SOFT−ソフト・バインド・モード。このモードでは、コールのパフォーマンスが向上します。これが最初のバインドであるか、dtyまたはvalue_szのような一部の入力値が前のバインドから変更されている場合、このモードは無視されます。文が実行されていない場合は、エラーが戻されます。渡されたバインド・ハンドルが有効でない場合、予期しない動作が発生します。

  • OCI_DATA_AT_EXEC− このモードが選択される場合、value_szパラメータは、実行時に提供可能なデータの最大サイズを定義します。アプリケーションは、OCIライブラリのランタイムINデータ・バッファをいつでも何回でも提供できる状態にしておく必要があります。ランタイム・データは、次の2つの方法のどちらかを使用して提供されます。

    • OCIBindDynamic()への後続コールによって登録されるユーザー定義関数を使用するコールバック。

    • OCIで提供されるコールを使用するポーリング・メカニズム。コールバックが定義されていない場合は、このモードになります。


      関連項目:


      OCI_DATA_AT_EXECモードの使用方法の詳細は、「OCIでのランタイム・データ割当てとピース単位操作」を参照してください。

      モードがOCI_DATA_AT_EXECに設定されているときは、メイン・コールでvaluepindpalenpおよびrcodepに値を指定しないでください。indpおよびalenpに対しては、0(ゼロ)を渡してください。値は、OCIBindDynamic()を使用し、登録されているコールバック関数を介して指定してください。

  • OCI_IOV: データの不連続アドレスをバインドします。valuepパラメータはOCIIOV *型である必要があります。

割り当てたバッファは、不要になった際にクライアント側で解放する必要があります。

コメント

このコールは、基本バインド操作を実行するときに使用します。バインドは、プログラム変数のアドレスとSQL文またはPL/SQLブロック内のプレースホルダの関連付けを作成します。このバインド・コールは、バインドされるデータの型も指定し、実行時にデータを提供するメソッドも指示できます。


注意:


OCIEnvNlsCreate()を使用して環境ハンドルを作成すると、バインド・ハンドルおよび定義ハンドルの実際の長さと戻される長さは、常にバイト単位になります。

この関数は、bindppパラメータによって指示されたバインド・ハンドルの暗黙的な割当ても行います。**bindppに非NULLポインタが渡されると、このポインタは、OCIHandleAlloc()またはOCIBindByPos()のコールで以前に割り当てられた有効なハンドルを指し示します。

OCIアプリケーション内のデータは、プレースホルダに静的または動的にバインドできます。実行の直前にすべてのINバインド・データとOUTバインド・バッファが正しく定義された場合、バインドは静的になります。アプリケーションの要求によって、INバインド・データとOUTバインド・バッファが実行時にクライアント・ライブラリに提供された場合、バインドは動的になります。動的バインドを指定するには、このコールのmodeパラメータをOCI_DATA_AT_EXECに設定します。


関連項目:


動的バインドの詳細は、「OCIでのランタイム・データ割当てとピース単位操作」を参照してください。

OCIBindByName()OCIBindByPos()は、パラメータとしてバインド・ハンドルを取りますが、これはバインド・コールによって暗黙的に割り当てられます。アプリケーションでバインドしているすべてのプレースホルダに別個のバインド・ハンドルが割り当てられます。

特定のデータ型をバインドする際または入力データを特定の方法で処理する際に必要となる特定の属性を指定する場合は、次の追加バインド・コールが必要です。

関連関数

OCIBindDynamic()OCIBindObject()OCIBindArrayOfStruct()


OCIBindDynamic()

用途

このコールは、動的データ割当て用のユーザー・コールバックを登録するときに使用します。

構文

sword OCIBindDynamic ( OCIBind     *bindp,
                       OCIError    *errhp,
                       void        *ictxp,
                       OCICallbackInBind         (icbfp)(
                                void             *ictxp,
                                OCIBind          *bindp,
                                ub4              iter,
                                ub4              index,
                                void             **bufpp,
                                ub4              *alenp,
                                ub1              *piecep,
                                void             **indpp ),
                                void             *octxp,
                       OCICallbackOutBind        (ocbfp)(
                                void             *octxp,
                                OCIBind          *bindp,
                                ub4              iter,
                                ub4              index,
                                void             **bufpp,
                                ub4              **alenpp,
                                ub1              *piecep,
                                void             **indpp,
                                ub2              **rcodepp ) );

パラメータ

bindp (IN/OUT)

OCIBindByName()またはOCIBindByPos()のコールにより戻されるバインド・ハンドルです。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

ictxp (IN)

コールバック関数icbfpに必要なコンテキスト・ポインタです。

icbfp (IN)

実行時にINバインド値またはピースのポインタを戻すコールバック関数です。コールバックは、次のパラメータを取ります。

ictxp (IN/OUT)

このコールバック関数用のコンテキスト・ポインタです。

bindp (IN)

このバインド変数を一意に指定するために渡されたバインド・ハンドルです。

iter (IN)

0(ゼロ)ベースの実行繰返し値。

index (IN)

カレント配列の索引(PL/SQLの配列バインド用)。SQLでは行の索引です。値は0(ゼロ)以上、バインド・コールのcurelepパラメータ値以下です。

bufpp (OUT)

バッファまたは記憶域のポインタです。記述子の場合、*bufppにはその記述子へのポインタが含まれています。たとえば、次のような定義を行うとします。

OCILobLocator    *lobp;

この場合、*bufpp*lobpではなく、lobpを設定します。

REFの場合はそのアドレスを渡します。つまり、*bufppに対して&my_refを渡します。

OCI_ATTR_CHARSET_ID属性がOCI_UTF16ID(下位互換性のために保持されている、非推奨になったOCI_UCS2IDの置換え)に設定されている場合は、対応するバインド・コールとの間で受渡しを行うデータは、すべてUTF-16エンコーディングとみなされます。

alenp (OUT)

バインド値またはバインド・ピースを埋め込んだ後それを保存するためのOCI用記憶域へのポインタです。記述子の場合、記述子にポインタのサイズを渡します。例: sizeof(OCILobLocator *)

piecep (OUT)

バインド値のいずれかのピース。この値は、OCI_ONE_PIECEOCI_FIRST_PIECEOCI_NEXT_PIECEまたはOCI_LAST_PIECEのいずれかです。ピース単位操作をサポートしないデータ型の場合、OCI_ONE_PIECEを渡す必要があります。OCI_ONE_PIECEを渡さないとエラーになります。

indp (OUT)

インジケータ値を含みます。これは、sb2値のポインタ、あるいは名前付きデータ型をバインドするインジケータ構造体のポインタです。

octxp (IN)

コールバック関数ocbfp()に必要なコンテキスト・ポインタです。

ocbfp (IN)

実行時にOUTバインド値またはピースのポインタを戻すコールバック関数です。コールバックは、次のパラメータを取ります。

octxp (IN/OUT)

このコールバック関数用のコンテキスト・ポインタです。

bindp (IN)

このバインド変数を一意に指定するために渡されたバインド・ハンドルです。

iter (IN)

0(ゼロ)ベースの実行繰返し値。

index (IN)

カレント配列のPL/SQL用索引(配列バインド用)です。SQLの場合、カレント反復の行番号です。値は0(ゼロ)以上、バインド・コールのcurelepパラメータ値以下です。

bufpp (OUT)

バインド値またはバインド・ピースを書き込むバッファのポインタ。

OCI_ATTR_CHARSET_ID属性がOCI_UTF16ID(下位互換性のために保持されている、非推奨になったOCI_UCS2IDの置換え)に設定されている場合は、対応するバインド・コールとの間で受渡しを行うデータは、すべてUTF-16エンコーディングとみなされます。詳細は、「バインド・ハンドル属性」を参照してください。

alenpp (IN/OUT)

バインド値またはバインド・ピースを埋め込んだ後それを保存するためのOCI用記憶域へのポインタです。コードポイントである場合、このポインタはバイト単位です。ただし、Unicodeエンコーディングの場合(OCI_ATTR_CHARSET_ID 属性がOCI_UTF16IDに設定されている場合)を除きます。

piecep (IN/OUT)

コールバック(アプリケーション)からOracleへ、次のようにピース値を戻します。

  • IN− 値はOCI_ONE_PIECEまたはOCI_NEXT_PIECEです。

  • OUT−INの値に応じて異なります。

IN値がOCI_ONE_PIECEの場合、OUT値はOCI_ONE_PIECEまたはOCI_FIRST_PIECEです。

IN値がOCI_NEXT_PIECEの場合、OUT値はOCI_NEXT_PIECEまたはOCI_LAST_PIECEです。

indpp (OUT)

インジケータ値を含みます。 これは、sb2値のポインタ、または名前付きデータ型をバインドするインジケータ構造体のポインタです。

rcodepp (OUT)

ポインタにリターン・コードを戻します。

コメント

このコールは、OCIBindByName()またはOCIBindByPos()の以前のコールでOCI_DATA_AT_EXECモードが指定された場合に、データの用意または受取り用のユーザー定義コールバック関数を登録するときに使用されます。

コールバック関数ポインタは、コールが成功した場合にはOCI_CONTINUEを戻します。OCI_CONTINUE以外のリターン・コードは、クライアントが処理の即時終了を求めていることを示します。


関連項目:


OCI_DATA_AT_EXECモードの詳細は、「OCIでのランタイム・データ割当てとピース単位操作」を参照してください。

記憶領域のアドレスを渡す際は、コールバックからアプリケーションが復帰した後も必ずその記憶領域が存在するようにしてください。したがって、このような記憶域はスタック上に割り当てないでください。


注意:


OCIEnvNlsCreate()を使用して環境ハンドルを作成すると、バインド・ハンドルおよび定義ハンドルの実際の長さと戻される長さは、常にバイト単位になります。

関連関数

OCIBindByName()OCIBindByPos()


OCIBindObject()

用途

この関数は、名前付きデータ型(オブジェクト)のバインドに必要な追加属性を設定します。

構文

sword OCIBindObject ( OCIBind          *bindp,
                      OCIError         *errhp,
                      const OCIType    *type,
                      void             **pgvpp,
                      ub4              *pvszsp,
                      void             **indpp,
                      ub4              *indszp, );

パラメータ

bindp (IN/OUT)

OCIBindByName()またはOCIBindByPos()のコールにより戻されるバインド・ハンドルです。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

type (IN)

バインドされているプログラム変数の型を示すTDOを指し示します。OCITypeByName()をコールして取り出します。SQLのREFではオプションですが、PL/SQLのREFでは必須です。

pgvpp (IN/OUT)

プログラム変数バッファのアドレスです。配列では、pgvppはアドレス配列を示します。バインド変数がOUT変数でもある場合は、オブジェクト・キャッシュ内にOUT名前付きデータ型値またはREFが割り当てられ、REFが戻されます。

pgvppは、OCI_DATA_AT_EXECモードが設定されている場合、無視されます。名前付きデータ型バッファは、実行時に要求されます。静的配列バインドでは、OCIBindArrayOfStruct()コールを使用してスキップ係数を指定できます。スキップ係数は、値に対する次のポインタのアドレスおよびインジケータ構造体、各自のサイズを計算するために使用されます。

pvszsp (OUT) [optional]

プログラム変数のサイズを指し示します。名前付きデータ型のサイズは、入力時には必要ありません。配列の場合、pvszspは、ub4配列です。戻り時には、OUTバインド変数に対して、受け取った名前付きデータ型とREFのサイズを指し示します。pvszspは、OCI_DATA_AT_EXECモードが設定されている場合、無視されます。この場合、バッファのサイズは実行時に要求されます。

indpp (IN/OUT) [optional]

パラレル・インジケータ構造体を含むプログラム変数バッファのアドレスです。配列では、ポインタ配列を示します。バインド変数がOUTバインド変数でもある場合は、オブジェクト・キャッシュにメモリーが割り当てられ、OUTインジケータ値が格納されます。すべてのOUT値が受け取られた実行終了時には、indppは、新たに割り当てられたこれらのインジケータ構造体のポインタを指し示します。SQLT_NTYバインドの場合のみ必要です。indppは、OCI_DATA_AT_EXECモードが設定されている場合無視されます。この場合、インジケータは実行時に要求されます。

indszp (IN/OUT)

INインジケータ構造体プログラム変数のサイズを指し示します。配列では、sb2配列です。戻り時には、OUTバインド変数に対して、受け取ったOUTインジケータ構造体のサイズを指し示します。indszpは、OCI_DATA_AT_EXECモードが設定されている場合無視されます。この場合、インジケータのサイズは実行時に要求されます。

コメント

この関数は、名前付きデータ型またはREFをバインドする追加属性を設定します。OCI環境が非オブジェクト・モードで初期化されているときにこの関数をコールした場合は、エラーが戻ります。

この関数は、定義される名前付きデータ型用にデータ型OCITypeの型記述子オブジェクト(TDO)をパラメータとして取ります。TDOは、OCITypeByName()をコールして取り出すことができます。

OCIBindByName()またはOCIBindByPos()OCI_DATA_AT_EXECモードが指定された場合、INバッファのポインタは、OCIBindDynamic()コールに登録されたコールバックicbfpを使用するか、OCIStmtSetPieceInfo()コールによって取得されます。

バッファはOUTデータに対して動的に割り当てられます。これらのバッファへのポインタは、次のいずれかの方法で戻されます。

クライアント・ライブラリが割り当てたバッファのメモリーは、不要になったときにOCIObjectFree()コールを使用して解放する必要があります。

関連関数

OCIBindByName()OCIBindByPos()


OCIDefineArrayOfStruct()

用途

このコールは、構造体配列(複数行、複数列)のフェッチで使用される静的配列定義に必要な追加属性を指定します。

構文

sword OCIDefineArrayOfStruct ( OCIDefine   *defnp,
                               OCIError    *errhp,
                               ub4         pvskip,
                               ub4         indskip,
                               ub4         rlskip,
                               ub4         rcskip );

パラメータ

defnp (IN/OUT)

OCIDefineByPos()のコールにより戻された定義構造体のハンドルです。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

pvskip (IN)

次のデータ値用のスキップ・パラメータです。

indskip (IN)

次のインジケータ位置のためのスキップ・パラメータです。

rlskip (IN)

次の戻り長さ値のためのスキップ・パラメータです。

rcskip (IN)

次のリターン・コードのためのスキップ・パラメータです。

コメント

このコールは、OCIDefineByPos()の後続コールです。アプリケーションでオブジェクトを含む構造体配列をバインドしている場合、最初にOCIDefineObject()をコールして、次にOCIDefineArrayOfStruct()をコールする必要があります。

関連関数

OCIDefineByPos()OCIDefineObject()


OCIDefineByPos()

用途

選択リスト内の項目を型と出力データ・バッファに関連付けます。

構文

sword OCIDefineByPos ( OCIStmt     *stmtp,
                       OCIDefine   **defnpp,
                       OCIError    *errhp,
                       ub4         position,
                       void        *valuep,
                       sb4         value_sz,
                       ub2         dty,
                       void        *indp,
                       ub2         *rlenp,
                       ub2         *rcodep,
                       ub4         mode );

パラメータ

stmtp (IN/OUT)

要求されたSQL問合せ操作へのハンドルです。

defnpp (IN/OUT)

定義ハンドルのポインタへのポインタです。このパラメータをNULLで渡すと、定義ハンドルが暗黙的に割り当てられます。再定義の場合は、非NULLハンドルをこのパラメータに渡すことができます。このハンドルは、この列用の定義情報を格納するために使用されます。


注意:


ユーザーはこのポインタを追跡する必要があります。同じ列位置に対する2回目のOCIDefineByPos()のコールでは、同じポインタが戻されるとはかぎりません。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

position (IN)

選択リストでのこの値の位置です。位置は1から始まり、左から右へ番号が振られます。値0(ゼロ)の場合は、ROWID(表の1行のグローバル一意識別子)が選択されます。

valuep (IN/OUT)

dtyパラメータに指定されているタイプのバッファまたはバッファの配列のポインタです。単独のフェッチ・コールで複数の行をフェッチする場合は、複数のバッファを指定できます。

LOBでは、バッファ・ポインタは、OCILobLocator型のLOBロケータのポインタにする必要があります。ポインタのアドレスを指定します。

modeOCI_IOVに設定されている場合は、OCIIOV構造体のベース・アドレスを渡します。

value_sz (IN)

valuepバッファのバイト・サイズです。データがVARCHAR2形式で内部的に格納されている場合、必要な文字数がバイト単位のバッファ・サイズと異なるときは、OCIAttrSet()を使用して追加指定できます。

マルチバイト変換環境では、指定したバイト数が、処理する文字数に対して不十分な場合、切捨てエラーが発生します。

OCI_ATTR_CHARSET_ID属性がOCI_UTF16ID(下位互換性のために保持されている、非推奨になったOCI_UCS2IDの置換え)に設定されている場合は、対応する定義コールとの間で受渡しを行うデータは、すべてUTF-16エンコーディングとみなされます。

modeOCI_IOVに設定されている場合は、データ値のサイズを渡します。

dty (IN)

データ型です。名前付きデータ型(SQLT_NTY)とREF(SQLT_REF)は、環境がオブジェクト・モードで初期化されている場合のみ有効です。

SQLT_CHARとSQLT_LNGをCLOB列に、SQLT_BINとSQLT_LBIをBLOB列に指定できます。


関連項目:


データ型コードおよび値については、第3章「データ型」のリストを参照してください。

indp (IN)

インジケータ変数または配列へのポインタです。スカラー・データ型の場合は、sb2またはsb2の配列へのポインタです。SQLT_NTY定義の場合は無視されます。SQLT_NTY定義では、名前付きデータ型のインジケータ構造体または名前付きデータ型のインジケータ構造体配列のポインタは、後続のOCIDefineObject()コールによって関連付けられます。


関連項目:


「標識変数」

rlenp (IN/OUT)

フェッチされたデータの長さの配列のポインタです。rlenp内の各要素は、フェッチ後の行にある対応する要素のデータ長です(コードポイントの場合は、valuepのデータがUnicodeでないかぎり、バイト単位です)。

rcodep (OUT)

列レベルのリターン・コードの配列のポインタです。

mode (IN)

次のモードが有効です。

コメント

このコールは、Oracleから取り出されたデータを受け取る出力バッファを定義します。この定義は、SELECT文がOCIアプリケーションにデータを戻すときに必要なローカル・ステップです。


注意:


OCIEnvNlsCreate()を使用して環境ハンドルを作成すると、バインド・ハンドルおよび定義ハンドルの実際の長さと戻される長さは、常にバイト単位になります。

このコールは、選択リスト項目用の定義ハンドルの暗黙的な割当ても行います。非NULLポインタが*defnppに渡されると、OCIではOCIHandleAlloc()またはOCIDefineByPos()のコールで以前に割り当てられた有効なハンドルを指し示します。別のアドレスに対してハンドルを再定義しているアプリケーションの場合はこれがあてはまるため、複数のフェッチに同じ定義ハンドルを再利用できます。

列をフェッチするための属性の定義は、1つ以上のコールで実行されます。最初のコールは、フェッチを指定するために必要な最小限の属性を定義するOCIDefineByPos()です。

ある種のデータ型またはフェッチ・モードでは、OCIDefineByPos()のコールの後に、次の追加定義コールが必要です。

LOB定義では、バッファ・ポインタは、OCIDescriptorAlloc()コールによって割り当てられるOCILobLocator型のLOBロケータのポインタにしてください。LOB列には、LOBの値ではなく、常にLOBロケータが戻ります。LOB値は、フェッチしたロケータに対してOCI LOBコールを使用するとフェッチできます。これと同じ方式がすべての記述子データ型で使用されます。

NCHAR(固定長および可変長)では、バッファ・ポインタは、必要なNCHAR文字を保持するのに十分なバイト配列を指し示している必要があります。

ネストした表の列は、他のすべての名前付きデータ型と同じように定義およびフェッチされます。

記述子またはロケータの配列を定義するときに、記述子またはロケータのポインタ配列を渡す必要があります。

キャラクタ列の配列を定義するときに、文字バッファ配列を渡す必要があります。

このコールのmodeパラメータにOCI_DYNAMIC_FETCHが設定された場合は、クライアント・アプリケーションから実行時にデータを動的にフェッチできます。ランタイム・データは、次の2つの方法で用意できます。

関連関数

OCIDefineArrayOfStruct()OCIDefineDynamic()OCIDefineObject()


OCIDefineDynamic()

用途

このコールは、OCIDefineByPos()OCI_DYNAMIC_FETCHモードが選択されたときに必要な追加属性を設定するために使用されます。

構文

sword OCIDefineDynamic ( OCIDefine   *defnp,
                         OCIError    *errhp,
                         void        *octxp,
                         OCICallbackDefine       (ocbfp)(
                                  void           *octxp,
                                  OCIDefine      *defnp,
                                  ub4            iter,
                                  void           **bufpp,
                                  ub4            **alenpp,
                                  ub1            *piecep,
                                  void           **indpp,
                                  ub2            **rcodep );

パラメータ

defnp (IN/OUT)

OCIDefineByPos()のコールにより戻される定義構造体へのハンドルです。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

octxp (IN)

コールバック関数のコンテキストを指し示します。

ocbfp (IN)

コールバック関数を指し示します。この関数は実行時にコールされ、検索されるフェッチ済データまたはそのピースを格納するバッファへのポインタを取得します。このコールバックは、インジケータ、リターン・コードおよびデータ・ピースとインジケータの長さも指定します。


注意:


通常、OCI関数では、INパラメータはOCIに渡すデータを表し、OUTパラメータはOCIから戻されるデータを表します。コールバックの場合、これが逆になります。 INはOCIからコールバックに渡されるデータ、OUTはコールバックからOCIに渡されるデータです。

コールバック・パラメータは次のとおりです。

octxp (IN/OUT)

すべてのコールバック関数へ引数として渡されるコンテキスト・ポインタです。クライアント・ライブラリがフェッチしたデータを戻すためにバッファが必要になると、このコールバックが呼び出され、用意されたランタイム・バッファがデータの一部または全部を戻します。

defnp (IN)

定義ハンドルです。

iter (IN)

このカレント・フェッチのいずれかの列(0(ゼロ)ベース)です。

bufpp (OUT)

列値を格納するバッファへのポインタを戻します。つまり、*bufppは列値に対する適切な記憶域を指し示します。

alenpp (IN/OUT)

これは、*bufppに提供している記憶域のサイズを設定するために、アプリケーションで使用します。データがバッファにフェッチされると、alenppはデータの実サイズをバイト単位で示します。 最初のコールで提供したバッファの長さが、サーバーから戻されるデータをすべて格納するのに十分でない場合は、コールバックが再びコールされるというようになります。

piecep (IN/OUT)

コールバック(アプリケーション)からOCIへ、次のようにピース値を戻します。

piecepパラメータは、フェッチされるピースが最初のピース(OCI_FIRST_PIECE)、その後続のピース(OCI_NEXT_PIECE)、最後のピース(OCI_LAST_PIECE)のいずれであるかを示します。 プログラムでは、コールバックが次にコールされたとき、または一連のコールバックが終了した後に、そのピースを処理できます。

  • IN− 値はOCI_ONE_PIECEOCI_FIRST_PIECEまたはOCI_NEXT_PIECEです。

  • OUT−INの値に応じて異なります。

INの値がOCI_ONE_PIECEである場合、OUTの値はOCI_ONE_PIECEです。

INの値がOCI_FIRST_PIECEである場合、OUTの値はOCI_ONE_PIECEまたはOCI_FIRST_PIECEです。

INの値がOCI_NEXT_PIECEである場合、OUTの値はOCI_NEXT_PIECEまたはOCI_LAST_PIECEです。

indpp (IN)

インジケータ変数ポインタです。

rcodep (IN)

リターン・コード変数ポインタです。

コメント

このコールは、OCIDefineByPos()のコールでOCI_DYNAMIC_FETCHモードが選択されている場合、必要な追加属性を設定するために使用されます。OCI_DYNAMIC_FETCHモードが選択されているときにOCIDefineDynamic()のコールがスキップされた場合、アプリケーションでは、OCIコール(OCIStmtGetPieceInfo()およびOCIStmtSetPieceInfo())を使用してデータ・ピース単位がフェッチされます。


注意:


OCIEnvNlsCreate()を使用して環境ハンドルを作成すると、バインド・ハンドルおよび定義ハンドルの実際の長さと戻される長さは、常にバイト単位になります。


関連項目:


OCI_DYNAMIC_FETCHモードの詳細は、「OCIでのランタイム・データ割当てとピース単位操作」を参照してください。

関連関数

OCIDefineObject()OCIBindDynamic()


OCIDefineObject()

用途

名前付きデータ型またはREFの定義のために必要な追加属性を設定します。

構文

sword OCIDefineObject ( OCIDefine       *defnp,
                        OCIError        *errhp,
                        const OCIType   *type,
                        void            **pgvpp,
                        ub4             *pvszsp,
                        void            **indpp,
                        ub4             *indszp );

パラメータ

defnp (IN/OUT)

以前OCIDefineByPos()のコールで割り当てられた定義ハンドルです。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

type (IN) [optional]

プログラム変数のタイプを示す型記述子オブジェクト(TDO)を指し示します。 このパラメータはSQLT_REF型の変数のオプションであり、使用しない場合はNULLとして渡せます。

pgvpp (IN/OUT)

プログラム変数バッファのポインタを指し示します。配列では、pgvppはポインタ配列を示します。フェッチした名前付きデータ型インスタンス用のメモリーは、オブジェクト・キャッシュ内に動的に割り当てられます。すべての値を受け取ったフェッチの終了時に、pgvppは、新たに割り当てられた名前付きデータ型インスタンスのポインタを示します。名前付きデータ型インスタンスが不要になった際には、アプリケーションからOCIObjectFree()をコールして、これらの割当てを解除する必要があります。


注意:


アプリケーションでバッファを暗黙的にキャッシュに割り当てるには、*pgvppNULLとして渡す必要があります。

pvszsp (IN/OUT)

プログラム変数のサイズを指し示します。配列では、ub4配列です。

indpp (IN/OUT)

パラレル・インジケータ構造体を含むプログラム変数バッファのポインタを指し示します。配列では、ポインタ配列を示します。インジケータ構造体を格納するためのメモリーがオブジェクト・キャッシュ内に割り当てられます。すべての値を受け取ったフェッチの終了時には、indppは、新たに割り当てられたインジケータ構造体のポインタを示しています。

indszp (IN/OUT)

インジケータ構造体プログラム変数のサイズを指し示します。配列では、ub4配列です。

コメント

この関数は、初期定義情報を設定するOCIDefineByPos()の後続コールです。このコールは、名前付きデータ型定義のために必要な追加属性を設定します。OCI環境が非オブジェクト・モードで初期化されているときにこの関数をコールした場合は、エラーが戻ります。

この関数は、定義される名前付きデータ型用にデータ型OCITypeの型記述子オブジェクト(TDO)をパラメータとして取ります。TDOは、OCIDescribeAny()をコールして取り出すことができます。


関連項目:


関連関数

OCIDefineByPos()


OCIDescribeAny()

用途

既存のスキーマ・オブジェクトおよびサブスキーマ・オブジェクトを記述します。

構文

sword OCIDescribeAny ( OCISvcCtx       *svchp,
                       OCIError        *errhp,
                       void            *objptr,
                       ub4             objptr_len,
                       ub1             objptr_typ,
                       ub1             info_level,
                       ub1             objtyp,
                       OCIDescribe     *dschp );

パラメータ

svchp (IN)

サービス・コンテキスト・ハンドルです。

errhp (IN/OUT)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

objptr (IN)

このパラメータは次のいずれかです。

  1. 記述されるオブジェクト名を含む文字列。OCIEnvNlsCreate()の直前のコールのcharsetパラメータで指定されたエンコーディングであることが必要です。

  2. TDOに対するREFのポインタ(型用)。

  3. TDOのポインタ(型用)。

前述の各値は、objptr_typに適切な値を渡すことで区別されます。このパラメータは非NULLにしてください。

1の場合、オブジェクト名を含む文字列は、hr.employees.employee_id@mydbのように、name1[.name2 ...][@linkname]の書式にしてください。データベース・リンクは、Oracle8i 以上のデータベースでのみ使用できます。オブジェクト名は、次のSQLルールによって解釈されます。

objnm_len (IN)

objptrが指し示す名前文字列の長さです。名前が渡される場合は、0(ゼロ)以外にしてください。objptrがTDOまたはそのREFへのポインタの場合は、0(ゼロ)でもかまいません。

objptr_typ (IN)

objptrに渡されるオブジェクトのタイプです。次の値が有効です。

info_level (IN)

今後の拡張要素のために確保されています。OCI_DEFAULTを渡します。

objtyp (IN)

記述されるスキーマ・オブジェクトのタイプです。次の値が有効です。

dschp (IN/OUT)

コール後のオブジェクトに関する記述情報とともに移入されている記述ハンドルです。NULL以外にしてください。

コメント

このコールは、表、ビュー、シノニム、プロシージャ、ファンクション、パッケージ、順序、型、スキーマおよびデータベースなどの既存のスキーマ・オブジェクトを記述する汎用的な記述コールです。このコールでは、表内の列などのサブスキーマ・オブジェクトも記述できます。このコールは、 OCIAttrGet()コールを使用して取得できるオブジェクト固有の属性を記述ハンドルに移入します。

記述ハンドルに対するOCIParamGet()は、指定位置のパラメータ記述子を戻します。パラメータ位置は1から開始します。パラメータ記述子に対してOCIAttrGet()をコールすると、ストアド・プロシージャまたはファンクション・パラメータの特定の属性、あるいは表の列記述子が戻されます。OCIDescribeAny()によってスキーマ・オブジェクト記述全体がクライアント側にキャッシュされているため、これらの後続コールは、サーバーへのラウンドトリップを別に行う必要がありません。記述ハンドルに対するOCIAttrGet()は、位置の総数も戻します。

記述ハンドルに対してOCI_ATTR_DESC_PUBLIC属性が設定されている場合、カレント・スキーマに名前付きオブジェクトが存在せずname1のみが指定されているときは、このオブジェクトはパブリック・シノニムとして参照されます。


関連項目:


記述操作の詳細は、第6章「スキーマ・メタデータの記述」を参照してください。

関連関数

OCIArrayDescriptorAlloc()OCIParamGet()


OCIStmtGetBindInfo()

用途

バインドおよびインジケータ変数名を取得します。

構文

sword OCIStmtGetBindInfo ( OCIStmt      *stmtp,
                           OCIError     *errhp,
                           ub4          size,
                           ub4          startloc,
                           sb4          *found,
                           OraText      *bvnp[],
                           ub1          bvnl[],
                           OraText      *invp[],
                           ub1          inpl[],
                           ub1          dupl[],
                           OCIBind      *hndl[] );

パラメータ

stmtp (IN)

OCIStmtPrepare()によって準備される文ハンドルです。

errhp (IN)

エラー発生時の診断情報のためにOCIErrorGet()に渡すエラー・ハンドルです。

size (IN)

各配列の要素数です。

startloc (IN)

バインド情報の取得を開始するバインド変数の位置です。

found (IN)

absfound)は、開始位置にかかわらず、文のバインド変数の総数を指定します。戻されたバインド変数の数が用意されたサイズよりも少ない場合は正数に、そうでない場合は負数になります。

bvnp (OUT)

バインド変数名を保持するポインタの配列です。OCIEnvNlsCreate()の直前のコールのcharsetパラメータで指定されたエンコーディングになります。

bvnl (OUT)

bvnp要素の長さを保持する配列です。長さはバイト単位です。

invp (OUT)

インジケータ変数名を保持するポインタの配列です。OCIEnvNlsCreate()の直前のコールのcharsetパラメータで指定されたエンコーディングであることが必要です。

inpl (OUT)

invp要素の長さを保持するポインタの配列です。バイト単位です。

dupl (OUT)

バインド位置が他と重複しているかどうかにより、その要素値が0または1になる配列です。

hndl (OUT)

バインド位置のバインドが完了している場合にバインド・ハンドルを戻す配列です。重複していると、ハンドルは戻りません。

コメント

このコールは、文が準備された後にバインド変数に関する情報を戻します。バインド名、インジケータ名および重複バインドかどうかなどの情報が含まれます。このコールでは、対応付けられたバインド・ハンドルがあれば、それも戻します。バインド変数の区別ごとの数ではなく、総数をfoundパラメータに設定します。

文にバインド変数が含まれない場合、または起動時に指定した開始バインド位置が文に存在しない場合、OCI_NO_DATAが戻されます。

SELECT INTOリスト変数はバインドとはみなされていないため、この関数には含まれません。

このコールの前に、OCIStmtPrepare()のコールを使用して文を準備する必要があります。文ハンドルのエンコーディング設定によって、Unicode文字列が取り出されるかどうかが決定されます。

このコールは、ローカルで処理されます。

関連関数

OCIStmtPrepare()