Hitachi

Hitachi Advanced Data Binder AP開発ガイド


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の行の検索を完了している場合は,検索できます。