18.2.3 ?パラメタを使用する場合
?パラメタを指定したSQL文を実行する場合は,SQL文の割り当て,SQL文の前処理,?パラメタの設定,およびSQL文の実行という手続きを行います。?パラメタを指定したときのSQL文実行の流れを次の図に示します。
文ハンドルの確保,SQL文の前処理,およびSQL文の実行方法については,「18.2.2 データを参照する場合」で説明した方法と同じです。ここでは,?パラメタ数の取得,?パラメタ情報の取得,入力データのSQLのデータ型への変換,および?パラメタの設定方法について説明します。
(1) ?パラメタ数の取得
動的にSQL文を実行するなど,APの作成時に?パラメタの数が確定していない場合は,a_rdb_SQLNumParams()を使用して?パラメタ数を取得します。?パラメタ数の取得例を次に示します。
- ?パラメタ数の取得例
-
/* ?パラメタ数の取得 */ rtnc = a_rdb_SQLNumParams(hCnct, hStmt, ¶mCount, /* ?パラメタの数*/ NULL) ;
a_rdb_SQLNumParams()については,「19.4.12 a_rdb_SQLNumParams()(?パラメタ数の取得)」を参照してください。
(2) ?パラメタ情報の取得
動的にSQL文を実行するなど,APの作成時に?パラメタのデータ型やデータ長などの情報が確定していない場合は,a_rdb_SQLDescribeParams()を使用して?パラメタの情報を取得します。a_rdb_SQLDescribeParams()で取得できる情報は次のとおりです。
-
?パラメタのデータ型
-
?パラメタの最大要素数
-
?パラメタのデータ長
?パラメタ情報の取得例を次に示します。
- ?パラメタ情報の取得例
-
/* ?パラメタ情報の取得 */ rtnc = a_rdb_SQLDescribeParams(hCnct, hStmt, paramCount, /* ?パラメタの数 */ &(paramInfo[0]), /* 全?パラメタ情報返却領域 */ NULL) ;
a_rdb_SQLDescribeParams()については,「19.4.7 a_rdb_SQLDescribeParams()(?パラメタの情報取得)」を参照してください。
(3) 入力データのSQLのデータ型への変換
?パラメタの入力データが,SQLのDECIMAL型,NUMERIC型,BINARY型,VARBINARY型,DATE型,TIME型,またはTIMESTAMP型のデータの場合,CLI関数を使用してC言語またはC++言語の文字列データから該当するデータ型に変換できます。C言語またはC++言語の文字列データをDECIMAL型のデータに変換する例を次に示します。
- データの変換例
-
#define PRECISION 6 #define SCALE 3 char data_char[]="-123.567"; unsigned char data_decimal[4]; /* DECIMAL型データに変換 */ rtnc = a_rdb_CNV_charDECIMAL(data_char, /* 変換するデータの先頭アドレス */ (unsigned short)strlen(data_char), /* 変換するデータ長 */ PRECISION, /* 入力データの精度 */ SCALE, /* 入力データの位取り */ data_decimal, /* 入力データの格納領域アドレス */ 4, /* 入力データの格納領域長 */ NULL);
-
DECIMAL型またはNUMERIC型のデータに変換する場合は,a_rdb_CNV_charDECIMAL()を使用します。a_rdb_CNV_charDECIMAL()については,「19.5.3 a_rdb_CNV_charDECIMAL()(DECIMAL型またはNUMERIC型データへの変換)」を参照してください。
-
BINARY型のデータに変換する場合は,a_rdb_CNV_charBINARY()を使用します。a_rdb_CNV_charBINARY()については,「19.5.1 a_rdb_CNV_charBINARY()(BINARY型データへの変換)」を参照してください。
-
VARBINARY型のデータに変換する場合は,a_rdb_CNV_charVARBINARY()を使用します。a_rdb_CNV_charVARBINARY()については,「19.5.6 a_rdb_CNV_charVARBINARY()(VARBINARY型データへの変換)」を参照してください。
-
DATE型のデータに変換する場合は,a_rdb_CNV_charDATE()を使用します。a_rdb_CNV_charDATE()については,「19.5.2 a_rdb_CNV_charDATE()(DATE型データへの変換)」を参照してください。
-
TIME型のデータに変換する場合は,a_rdb_CNV_charTIME()を使用します。a_rdb_CNV_charTIME()については,「19.5.4 a_rdb_CNV_charTIME()(TIME型データへの変換)」を参照してください。
-
TIMESTAMP型のデータに変換する場合は,a_rdb_CNV_charTIMESTAMP()を使用します。a_rdb_CNV_charTIMESTAMP()については,「19.5.5 a_rdb_CNV_charTIMESTAMP()(TIMESTAMP型データへの変換)」を参照してください。
(4) ?パラメタの設定
a_rdb_SQLBindParams()を使用して?パラメタを設定します。設定が正常に完了すると,戻り値としてa_rdb_RC_SQL_SUCCESSが返されます。?パラメタの設定例を次に示します。
- ?パラメタの設定例
-
/* ?パラメタの設定 */ rtnc = a_rdb_SQLBindParams(hCnct, hStmt, paramCount, /* ?パラメタの数 */ &(paramInfo[0]), /* 全?パラメタ設定用領域 */ NULL) ;
a_rdb_SQLBindParams()については,「19.4.4 a_rdb_SQLBindParams()(?パラメタの関連づけ)」を参照してください。