仕様: | DB2 CLI 2.1 | ODBC 2.0 |
SQLBindParameter() は、すべての C データ・タイプに関して 、SQL ステートメント内のパラメーター・マーカーをアプリケーション変数に 関連付ける (バインドする) ために使用します。この場合 、SQLExecute() または SQLExecDirect() の呼び出し時に、 データはアプリケーションから DBMS に転送されます。 データの転送時に、データ変換が行われる場合があります。
構文
SQLRETURN SQL_API SQLBindParameter( SQLHSTMT StatementHandle, /* hstmt */ SQLUSMALLINT ParameterNumber, /* ipar */ SQLSMALLINT InputOutputType, /* fParamType */ SQLSMALLINT ValueType, /* fCType */ SQLSMALLINT ParameterType, /* fSqlType */ SQLUINTEGER ColumnSize, /* cbColDef */ SQLSMALLINT DecimalDigits, /* ibScale */ SQLPOINTER ParameterValuePtr,/* rgbValue */ SQLINTEGER BufferLength, /* cbValueMax */ SQLINTEGER *FAR StrLen_or_IndPtr);/* pcbValue */
関数の引き数
データ・タイプ | 引き数 | 用途 | 説明 |
---|---|---|---|
SQLHSTMT | StatementHandle | 入力 | ステートメント・ハンドル。 |
SQLUSMALLINT | ParameterNumber | 入力 | 1 から始まり、左から右へ順番に並べられるパラメーター・マーカー番号。 |
SQLSMALLINT | InputOutputType | 入力 | パラメーターのタイプ。サポートされるタイプは次のとおり。
|
SQLSMALLINT | ValueType | 入力 | パラメーターの C データ・タイプ。以下のタイプがサポートされる。
SQL_C_DEFAULT を指定すると、データがそのデフォルトの C データ・タイプから 、ParameterType に示したタイプに転送される。 |
SQLSMALLINT | ParameterType | 入力 | パラメーターの SQL データ・タイプ。サポートされるタイプは次のとおり。
|
SQLUINTEGER | ColumnSize | 入力 | 対応するパラメーター・マーカーの精度。
|
SQLSMALLINT | DecimalDigits | 入力 | ParameterType が SQL_DECIMAL である場合、対応するパラメーターの位取り。 |
SQLPOINTER | ParameterValuePtr | 入力 (据え置き)、出力 (据え置き)、あるいはその両方 |
|
SQLINTEGER | BufferLength | 入力 | 文字データおよびバイナリー・データの場合 、BufferLength は ParameterValuePtr バッファーの長さを指定する。 文字データとバイナリー・データ以外の場合、この引き数は無視され 、ParameterValuePtr バッファーの長さは、C データ・タイプに 関連する長さであると見なされる。 出力パラメーターの場合、BufferLength を使用してデータを切り捨てるかどうかを決定する。 |
SQLINTEGER * | StrLen_or_IndPtr | 入力 (据え置き)、出力 (据え置き)、あるいはその両方 |
|
使用法
パラメーター・マーカーは、SQL ステートメント内の ? 文字によって表さ れ、ステートメントを実行する時に、アプリケーションが提供した値を 置き換えたい、ステートメント内の位置を指定するために使用します。 この値は、アプリケーション変数から入手することができます。 アプリケーションのストレージ域をパラメーター・マーカーにバインドするには、SQLBindParameter() を使用します。
SQL ステートメントの実行前に、アプリケーションでは SQL ステートメント内 の各パラメーター・マーカーに変数をバインドする必要があります。 この関数の場合、ParameterValuePtr と StrLen_or_IndPtr は 据え置き引き数です。ステートメントを実行する時、保管場所は有効であり、かつ入力データ値 を含んでいなければなりません。これは、SQLExecDirect() また は SQLExecute() 呼び出しを SQLBindParameter() 呼び出しと 同じプロシージャー効力範囲内に保持しておく必要があること、あるいはこれらの保管場所 を動的に割り当てるか、静的またはグローバルとして宣言する必要があること を意味します。
パラメーター・マーカーは番号 (ColumnNumber) によって参照されます。 番号は 1 から始まり、左から右へ順に付けられます。
この関数によってバインドされたすべてのパラメーターは、以下のいずれか の関数を呼び出すまで、引き続き有効です。
SQL ステートメントを実行し結果を処理した後、アプリケーションでは、ス テートメント・ ハンドルを再使用して別の SQL ステートメントを実行することができます。 パラメーター・マーカー指定 (パラメーター数、長さ、またはタイプ) が異なる場合、 パラメーターのバインディングをリセットまたは消去するために、SQL_RESET_PARAMS を 指定して SQLFreeStmt() を呼び出す必要があります。
ValueType によって指定された C バッファーのデータ・タイプは 、ParameterType によって指定された SQL データ・タイプと互換 性がなければなりません。さもないと、エラーが発生します。
ParameterValuePtr と StrLen_or_IndPtr が参照する変数 内のデータは、ステートメントの実行時まで検査されないため、データの内 容または形式のエラーは、SQLExecute() または SQLExecDirect() を 呼び出すまで、検出または報告されません。
この関数の場合、ParameterValuePtr と StrLen_or_IndPtr は 据え置き引き数です。InputOutputType を SQL_PARAM_INPUT に設定した 場合、ステートメントの実行時に、保管場所は有効であり、かつ入力データ値 を含んでいなければなりません。これは、SQLExecDirect() また は SQLExecute() 呼び出しを SQLBindParameter() 呼び出しと 同じプロシージャー効力範囲内に保持しておく必要があること、あるいはこれらの保管場所 を動的に割り当てるか、静的またはグローバルとして宣言する必要があること を意味します。
DB2 Everyplace は SQL_PARAM_INPUT、SQL_PARAM_INPUT_OUTPUT、および SQL_PARAM_OUTPUT をサポートします。 DB2 Everyplace は、SQLPutData() をサポートしない ため、ParameterValuePtr バッファーに パラメーター値を保管しないでください。
文字データおよびバイナリー C データの場合、BufferLength 引き数 は ParameterValuePtr バッファーの長さを指定します。 他のすべてのタイプの C データの場合、BufferLength 引き数は無視されます。
戻りコード
診断
表 35. SQLBindParameter の SQLSTATE
SQLSTATE | 説明 | 解説 |
---|---|---|
07006 | 無効な変換。 | ValueType 引き数によって示したデータ値 から ParameterType 引き数によって示したデータ・タイプへの変換が 無意味な変換である。(例えば、SQL_C_DATE から SQL_DOUBLE への変換。) |
40003 08S01 | 通信リンク障害。 | 関数の完了前に、アプリケーションとデータ・ソース間の通信リンクに障害が生じた。 |
58004 | 予期しないシステム障害。 | 回復不能なシステム・エラー。 |
HY001 | メモリーの割り振りの失敗。 | DB2 CLI が、関数を実行または完了させるのに必要なメモリーを割り当てることができない。 |
HY003 | プログラム・タイプが範囲外。 | 引き数 ParameterNumber によって指定した値が、有効なデータ・タイプ または SQL_C_DEFAULT ではない。 |
HY004 | SQL データ・タイプが範囲外。 | 引き数 ParameterType に指定した値が、無効な SQL データ・タイプである。 |
HY009 | 無効な引き数値。 | 引き数 ParameterValuePtr と StrLen_or_IndPtr がヌル・ ポインターであり、InputOutputType が SQL_PARAM_OUTPUT ではない。 |
HY013 | 予期しないメモリー処理エラー。 | DB2 CLI が、関数を実行または完了させるのに必要なメモリーにアクセスできない。 |
HY090 | 無効なストリング長またはバッファー長。 | 引き数 BufferLength に指定した値が 0 より小さい。 |
HY093 | 無効なパラメーター番号。 | 引き数 ValueType に指定した値が、1 より小さいか、サーバーによってサポートされるパラメーターの最大数を超えている。 |
HY094 | 無効な位取り値。 | ParameterType に指定した値が SQL_DECIMAL または SQL_NUMERIC であり、 DecimalDigits に指定した値が 0 より小さいか、 引き数 ParamDef (精度) の値より大きい。 |
HY104 | 無効な精度値。 | ParameterType に指定した値が SQL_DECIMAL または SQL_NUMERIC のいずれかであるが、 ParamDef に指定した値が 1 より小さい。 |
HY105 | 無効なパラメーター・タイプ。 | InputOutputType が SQL_PARAM_INPUT ではない。 |
HYC00 | ドライバーが使用不可である。 | DB2 CLI またはデータ・ソースが、引き数 ValueType に指定した
値と引き数 ParameterType に指定した値の組み合わせによって指定した
変換をサポートしない。
引き数 ParameterType に指定した値が、DB2 CLI またはデータ・ソース によってサポートされない。 |
関連した解説