3.2.6 マルチスレッドを使用したUAPのSQLの実行
(1) 単一接続の場合(接続ハンドルを使用しない場合)
マルチスレッドを使用したUAPでSQLを実行する場合,SQLを実行中の接続に対して,別スレッドからSQLを実行することはできません。実行した場合は動作を保証しません。
SQLを実行中の接続に対して,別スレッドからSQLを実行した場合は,KFPA11725-Eエラーとします。そのため,KFPA11725-Eエラーが発生する場合は,SQLを実行するスレッドとの間で処理をシリアライズして,SQLを実行中の接続に対して,別スレッドからSQLを実行しないようにプログラムを修正してください。スレッド間で接続を共有する例を次の図に示します。
接続1は複数接続機能を使用していない(接続ハンドルを使用していない)ため,プロセス内で接続が共有されます。スレッド1の接続1でのSQL実行中に,スレッド2が接続1に対してSQLを実行したため,スレッド2のSQLはKFPA11725-Eエラーとなります。このような場合,接続1を共有しているスレッドの処理をシリアライズし,スレッド1のSQL実行中に,スレッド2からSQLを実行しないようにしてください。
(2) 複数接続機能を使用する場合(接続ハンドルを使用する場合)
マルチスレッドを使用したUAPで,複数接続機能の接続ハンドルを使用する場合,SQLを実行中の接続ハンドルを使用して,別スレッドからSQLを実行することはできません。実行した場合は動作を保証しません。
SQLを実行中の接続ハンドルを使用して,別スレッドからSQLを実行した場合は,KFPA11725-Eエラーとします。そのため,KFPA11725-Eエラーが発生する場合は,SQLを実行するスレッドとの間で処理をシリアライズして,SQLを実行中の接続ハンドルを使用して,別スレッドからSQLを実行しないようにプログラムを修正してください。複数接続機能を使用してスレッド間で接続ハンドルを共有する例を次の図に示します。なお,複数接続機能の詳細は「複数接続機能」を参照してください。
接続ハンドル1及び接続ハンドル2を,スレッド間で共有しています。スレッド2の接続ハンドル1でのSQL実行中に,スレッド3が接続ハンドル1を使用してSQLを実行したため,スレッド3のSQLはKFPA11725-Eエラーとなります。このような場合,接続ハンドル1を共有しているスレッドとの間で処理をシリアライズして,スレッド2のSQL実行中に,スレッド3からSQLを実行しないようにしてください。
なお,スレッド2のSQL実行中に,スレッド1もSQLを実行していますが,スレッド1が使用した接続ハンドル2はスレッド2の接続ハンドルと異なるため,スレッド1のSQLは実行できます。