[pgsql-jp: 29109] 同時更新の制御
TVH51179 @ biglobe.ne.jp
TVH51179 @ biglobe.ne.jp
2003年 2月 18日 (火) 17:04:00 JST
小林と申します。いつもお世話になっております。
RedHatLinux 7.2にて
Postgres-7.3.1を使用しております。
旧メーリングリストにて同様な質問−回答を参考にし、
色々試してみたのですが、どうもうまくいきません。
表に以下の値が入っているとします。
a b
------
1 1
2 1
この表に対してCの埋込SQLにて以下を行います。
(ここで、wk_a,wk_bはホスト変数とします)
EXEC SQL DECLARE test_cur CURSOR FOR SELECT * FROM 表;
EXEC SQL OPEN test_cur;
EXEC SQL FETCH IN CURSOR INTO :wk_a,:wk_b;
EXEC SQL UPDATE 表 set b=:wk_b+1 where a=:wk_a;・・・(1)
EXEC SQL FETCH IN CURSOR INTO :wk_a,:wk_b;
EXEC SQL UPDATE 表 set b=:wk_b+1 where a=:wk_a;・・・(1)
EXEC SQL COMMIT;
注:(1)のところで、bに設定する値はホスト変数を使用します。
このプログラムを2つ同時に走行した場合、(a,b)=(1,2),(2,2)となります。
(a,b)=(1,3),(2,3)を得るためにはどのようにすれば良いでしょうか?
もし、ロックを使用する場合は行ロックにて行いたいと思っております。
また、
他トランザクションで更新されたデータを(再定義なしで)カーソルが
保存しているデータに反映させることはできないのでしょうか?
さらに、FETCH時に行ロックをかけることは出来るのでしょうか?
可能な限りカーソルを使用したいのですが、不可能であれば、
カーソルでなくても構いません。
よろしくお願いいたします。
−−−−−−−−−−−−−−−−−−−
小林 克彦(TVH51179 @ biglobe.ne.jp)
pgsql-jp メーリングリストの案内