Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


13.8.2 ODBC関数の非同期実行の手順

ODBC関数を非同期に実行する場合の手順を次に示します。

<手順>

  1. 特定のhstmt(ステートメントハンドル)だけで非同期実行を有効にするオプションSQL_ASYNC_ENABLEを使用して,SQLSetStmtOption※1を呼び出します。hdbc(接続ハンドル)について,関連するすべてのhstmtで非同期実行を有効にする場合は,オプションSQL_ASYNC_ENABLEを使用してSQLSetConnectOption※2を呼び出します。

  2. 非同期実行が有効となっているhstmtを使用して非同期実行できるODBC関数※1を呼び出すと,ODBCドライバはその関数の非同期実行を開始し,SQL_STILL_EXECUTINGを返します(非同期実行とならなかった場合,又はエラーが発生した場合は,SQL_SUCCESSやSQL_ERRORなどの同期実行時のコードを返します)。

  3. ODBC関数が非同期実行されている間に,アプリケーションプログラムはほかの処理を実行できます。非同期実行しているhstmtと,それに関連するhdbcでアプリケーションプログラムが呼び出せる関数は,SQLAllocStmt,SQLCancel,又はSQLGetFunctionsだけです。そのほかの関数(非同期実行中の関数を除く)を呼び出すと,ドライバマネージャからシーケンスエラーが返されます。

  4. アプリケーションプログラムは非同期実行のODBC関数を呼び出して,その関数の実行が終了したかどうかを確認します。関数が引き続き実行状態の場合はSQL_STILL_EXECUTINGが返され,処理が終了している場合はSQL_SUCCESSやSQL_ERRORなどのリターンコードが返されます。

    確認のために関数を呼び出す場合,hstmt以外の引数は指定しても無視されます(ただし,不当なアドレス,指定値はエラーとなる可能性があるため,有効な値でなければなりません)。例えば,INSERT文でSQLExecDirectを非同期実行し,再度SQLExecDirectを呼び出す場合に,UPDATE文を指定していても戻り値はINSERT文実行の状態が返ります。

特定のhstmtだけで非同期実行を無効にする場合も,オプションSQL_ASYNC_ENABLEを使用してSQLSetStmtOptionを呼び出します。hdbcについて,関連するすべてのhstmtで非同期実行を無効にする場合は,オプションSQL_ASYNC_ENABLEを使用してSQLSetConnectOptionを呼び出します。

注※1

SQLSetStmtOptionでの設定内容を次に示します。

fOption

設定内容

SQL_ASYNC_ENABLE

SQL_ASYNC_ENABLE_OFF,又はSQL_ASYNC_ENABLE _ON

SQL_BIND_TYPE

設定できません。

SQL_MAX_LENGTH

サーバの制限値,又はユーザの指定値

SQL_NOSCAN (Default=FALSE)

SQL_NOSCAN_OFF,又はSQL_NOSCAN_ON

SQL_QUERY_TIMEOUT

設定できません。

SQL_MAX_ROWS

サーバの制限値,又はユーザの指定値

注※2

SQLSetConnectOptionでの設定内容を次に示します。

fOption

設定内容

SQL_ACCESS_MODE

SQL_MODE_READ_WRITE固定

SQL_AUTOCOMMIT

SQL_AUTOCOMMIT_OFF,又は SQL_AUTOCOMMIT_ON

SQL_LOGIN_TIMEOUT

設定できません。

SQL_OPT_TRACE

0(Off)固定。

ODBCドライバマネージャから返されるオプションです。

SQL_OPT_TRACEFILE

NULL固定。

ODBCドライバマネージャから返されるオプションです。

SQL_TRANSLATE_DLL

設定できません。

SQL_TRANSLATE_OPTION

設定できません。

SQL_TXN_ISOLATION

SQL_TXN_READ_UNCOMMITED

SQL_ASYNC_ENABLE

SQL_ASYNC_ENABLE_OFF,又はSQL_ASYNC_ENABLE _ON