18.1.4 更新操作によるカーソルを使用した検索への影響
カーソルを使用した検索中に更新操作を行うと,タイミングによっては更新操作の結果が,検索の結果に反映されることがあります。更新操作の結果を検索の結果に反映させないようにするには,次のように運用してください。
-
カーソルを閉じたあとに,行の追加または更新を行う
-
追加または更新する行が,検索結果と一致しないようにデータや探索条件などを工夫する
カーソルを使用した検索中の更新操作の例を次に示します。
char *selSql = "SELECT * FROM T1 WHERE C1 BETWEEN 10 AND 20"; char *updSql = "UPDATE T1 SET C1=30 WHERE C1=20"; /* SELECT文の前処理 */ rtnc = a_rdb_SQLPrepare(cnctContext, hStmt1,selSql); : /* 行の取り出し */ rtnc = a_rdb_SQLFetch(cnctContext, hStmt1); ...1 /* UPDATEの前処理 */ rtnc = a_rdb_SQLPrepare(cnctContext, hStmt2, updSql); /* 行の更新 */ rtnc = a_rdb_SQLExecute(cnctContext, hStmt2); ...2 /* 行の取り出し */ rtnc = a_rdb_SQLFetch(cnctContext, hStmt1); ...3 :
- [説明]
-
2.の時点でC1列が20の行を更新した場合,1.の時点での1回目のFETCH実行によって,すでにHADBサーバがAPとは非同期に検索処理を実行しています。そのため,タイミングによっては3.の時点でC1列が20の行を検索できないことがあります。すでにC1列が20の行の検索を完了している場合は,検索できます。