アルパカDiary Pro

はてなブログProではありません

Postgres 更新可能カーソル(記事修正)

カーソルでフェッチした行を、カーソル名で更新可能な更新可能カーソル*1
こんな感じですかね。

EXEC SQL DECLARE cur_hoge CURSOR FOR
 SELECT * FROM hoge FOR UPDATE;
EXEC SQL OPEN cur_hoge;
EXEC SQL FETCH cur_hoge INTO :hogecol1, :hogecol2;
EXEC SQL 
 UPDATE hoge SET hogecol1='val' WHERE CURRENT OF cur_hoge;
EXEC SQL CLOSE cur_hoge;

しかし、対象テーブルのOIDを無効にしていると
こんなエラーメッセージが表示されてしまいます。
*2
OIDとか関係ありませんでした。
DECLARE CURSORで、 ORDER BYを使用したSELECT文を定義すると
以下のエラーになるようです。

'cursor "cur_hoge" is not a simply updatable scan of table "hoge"'

OracleだとソートかけたSELECT文でも出来たような気がするんですが…
これバグじゃないですかねー?

*1:Postgres8.3から有効になったようです

*2:2008/9/19修正