パラメータの配列を使用するためには、アプリケーションで以下を実行する必要があります。
- (オプション。デフォルトは列方向です。)引数SQL_ATTR_PARAM_BIND_TYPEを指定してSQLSetStmtAttrを呼び出し、列方向または行方向のバインドを指定します。
列方向バインドの場合、値はSQL_BIND_BY_COLUMNです。行方向バインドの値は、パラメータを保持している配列内の1行のサイズに設定されます。
- (オプション。デフォルトは1です。)引数SQL_ATTR_PARAMSET_SIZEを指定してSQLSetStmtAttrを呼び出し、パラメータのセット数を指定します。
設定されているパラメータが1つのみの配列リクエストは、“非配列”リクエストと同等です。
- (SQL_ATTR_PARAMSET_SIZEが1より大きい場合にのみ必須。)引数SQL_ATTR_PARAM_STATUS_PTRを指定してSQLSetStmtAttrを呼び出し、パラメータ値の各セットの返信ステータス情報を含む配列を参照します。
- (オプション)引数SQL_ATTR_PARAM_OPERATION_PTR付きでSQLSetStmtAttrを呼び出し、パラメータ値のセットを除外または含めるために使用される配列をポイントします。
- (オプション)引数SQL_ATTR_PARAMS_PROCESSED_PTR付きでSQLSetStmtAttrを呼び出し、エラー セットなどの処理されたパラメータのセットの数がドライバから返される、変数のアドレスを指定します。
- (オプション)引数SQL_ATTR_PARAM_BIND_OFFSET_PTR付きでSQLSetStmtAttrを呼び出し、ParameterValuePtroyおよびStrLen_or_IndPtrパラメータに追加される、SQLBindParameterへの整数オフセットを含む変数のアドレスを指定します。
- 各パラメータに対してSQLBindParameterを呼び出し、配列をパラメータにバインドします。
- 次の実行関数の1つを呼び出します。SQLExecDirectまたはSQLPrepare/SQLExecute
次の図に、パラメータの使用法を示します。
ステートメントの実行時に、ODBC Driver for Teradataはステートメントに格納された情報を使用してパラメータの値を取得し、それらの値をデータ ソースに送信します。
文属性SQL_ATTR_PARAM_OPERATION_PTRによってポイントされた配列は、パラメータの行を無視するために使用できます。配列の1要素がSQL_PARAM_IGNOREに設定されている場合、その要素に対応するパラメータのセットは、SQLExecuteまたはSQLExecDirect呼び出しから除外されます。取り出された行が入力パラメータとして使用されている場合、行ステータス配列の値はパラメータ操作配列で使用できます。
文属性SQL_ATTR_PARAM_STATUS_PTRが設定されている場合、SQLExecuteまたはSQLExecDirectはパラメータ ステータス配列を返します。パラメータ ステータス配列は、パラメータの各セットのステータスを提示します。パラメータ ステータス配列は、アプリケーションによって割り振られ、ドライバによって入力されます。その要素には、パラメータの行でSQL文の実行が成功したかどうか、またはパラメータのセットの処理中にエラーが発生したかどうかが示されます。エラーが発生した場合、ドライバはパラメータ ステータス配列内の対応する値をSQL_PARAM_ERRORに設定し、SQL_ERRORを返します。アプリケーションでは、ステータス配列をチェックして、どのパラメータ行が処理されたかを判断できます。行番号を使用すれば、アプリケーション側でエラーを訂正し、処理を再開できます。
次の表は、配列サポート情報を備えたDML文のタイプの一覧です。
DML文 | 説明 |
---|---|
ABORT | WHERE句がある場合のみ |
DELETE | 「配置」以外の全形式 |
EXECUTEマクロ | マクロは、反復用に修飾された単一文でなければなりません。 |
INSERT | INSERT ... SELECTを含む |
LOCKING修飾子 | 変更された要求は、反復用に修飾されていなければなりません。 |
MERGE | UPDATE (Upsert形式)に類似しています。 |
ROLLBACK | WHERE句が存在する場合のみ(ABORTの別名) |
SELECT | 応答は、展開された要求での場合と同様に返されます。 |
UPDATE (検索された形式) | 複雑で「妥当でない」更新を含みます。 |
UPDATE (Upsert形式) | UPDATE ... ELSE INSERT(Atomic UPSERT) |