トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-58 時刻印法による楽観的ロック

SQLパズル

table1058
name1  name2  更新時間
-----  -----  --------
aaaaa  bbbbb   sysdate

時刻印法による楽観的ロックを実装する

こちらを参考にさせていただきました


データ作成スクリプト

create table table1058(
name1    char(5),
name2    char(5),
更新時間 date);

insert into table1058 values('aaaaa','bbbbb',sysdate);
commit;


SQL

--■■■データ取得時■■■
select name1,name2,sysdate as データ参照時間
  from table1058

--■■■更新時■■■
update table1058
   set name1 = 'ccccc',
       name2 = 'ddddd',
       更新時間 = sysdate
 where 更新時間 <= &データ参照時間;


解説

データ取得時のsysdateと、
更新時の、レコードの更新時間を比較してます

rowDependencies指定でcreateしたテーブルなら、
SCNを使った、多バージョン法もあります