• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数updateする時に・・・)

複数updateする方法とは?

このQ&Aのポイント
  • 複数のレコードを一度に更新する方法について調べています。
  • 現在のA項目の最大値に1を足した値から順にインクリメントした値を入れたいです。
  • また、同じ値を更新する場合に効率的な方法があるか知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

ご想像通り、無理です。 ストアドプロシージャで解決できます。(多分) ただし、Primary Keyフィールドも必要でしょう。 まずMAX値を取得しておきます。 これを変数か何かにキープしておきましょう。 DECLARE cursor_id INTEGER; SELECT MAX(data) INTO cursor_id FROM sample 以下のSELECT文で変更対象となるデータのidの値に カーソルをセットし、カーソル末尾までFETCHし、 繰返します。 DECLARE c1 CURSOR FOR SELECT id FROM sample WHERE data=0 AND key=A; 繰り返す際に、 OPEN c1; FETCH c1 INTO cursor_id; WHILE cursor_id DO UPDATE sample SET data=max_val+1 WHERE id = cursor_id; FETCH c1 INTO cursor_id; SET max_val = max_val + 1; END WHILE; CLOSE c1; とやればできるのではないでしょうか? P.S. postgresで試していないので、エラーがでます。 およそこんな感じということで、、、

chopin22
質問者

お礼

そうですね・・・。 ストアド(PostgreSQLだとPL/pgSQLかな・・・)にするかどうかは検討します。CGIから呼ぶのでプログラムの中でも出来るので。 有難うございました

関連するQ&A