次の例は、OutputAsResultSetオプションがNに設定されている場合に、ストアド プロシージャのCALL文をODBCアプリケーションで使用する方法を説明したものです。
ストアド プロシージャspODBCにはOUTタイプのp1、INOUTタイプのp2、INタイプのp3の3つのパラメータがあると仮定します。
“?”文字は、IN引数、OUT変数、INOUT引数のプレースホルダーとして動作します。“?”文字のプレースホルダー引数は、SQLBindParameter ODBC SDK API呼び出しを使用して、アプリケーションのローカル変数にバインドする必要があります。
{ char *request = "CALL spODBC(?, ?, ?)"; ... SQLBindParameter(..., 1, SQL_PARAM_OUTPUT, ..., SQLINTEGER, ..., ..., AppVar1, sizeof(AppVar1), ...); SQLBindParameter(..., 2, SQL_PARAM_INPUT_OUTPUT, ..., SQLINTEGER, ..., ..., AppVar2, sizeof(AppVar2), ...); SQLBindParameter(..., 3, SQL_PARAM_INPUT,..,SQLINTEGER, ...,...,AppVar3, sizeof(AppVar3),...); ... SQLExecDirect(hstmt, request); ... }
次のような場合に当てはまります。
AppVar1、AppVar2、およびAppVar3は、ODBCアプリケーションに特有のINTEGERデータ型ローカル変数で、要求の送信中は入力データ、結果の受信中は出力データなど、特定の値を表わします。
SQLBindParameter()の第2引数は、1から始めて左から右へ順番に付けた、"?"の番号です。
出力パラメータ値を取り出す方法:
INOUTおよびOUTパラメータの値は、SQLFetch API呼び出しの後に(SQLBindParameterを使用して設定される)ローカル変数を直接出力するか、後にSQLFetch API呼び出しが続くSQLBindCol ODBC SDK APIを使用して、応答内容から取得する必要があります。
SQLBindCol(..., 1, ..., AppVar1, ..., ...); SQLBindCol(..., 2, ..., AppVar2, ..., ...);
次のような場合に当てはまります。
SQLBindCol()の第2引数は、1から始めて左から右へ順番に付けた、結果セットのパラメータ番号です。
INOUTおよびOUTパラメータの値は、後にSQLGetdata APIが続くSQLFetch ODBC SDK APIを使用して、応答内容から取得することもできます。