[pgsql-jp: 33453] RULEにおけるNEWについて
MINOURA
minoura @ wplanning.co.jp
2004年 7月 1日 (木) 14:15:15 JST
みのと申します。
すいません。先ほど送ったメールに件名をつけ忘れました。
二重の投稿になりますがお許しください。
ルールにおけるNEWの使い方で、よくわからないところがあるので質問させてください。
CREATE TABLE members(
code SERIAL PRIMARY KEY,
name TEXT,
nickname TEXT
);
というテーブルがあったとします。
やりたいことは、
(1)レコード登録時に'name', 'nickname' 両フィールドに値が入った場合はそのまま。
INSERT INTO members (name, nickname) VALUES ('foo', 'bar');
-->'nickname'に'bar'が入る。
(2)'name' フィールドにしか値が入らなかったときは'nickname' フィールドにも'name' と同じ値を格納する。
です。
INSERT INTO members (name) VALUES ('foo');
-->'nickname'にも'foo'が入る。
そこでこんなRULEを作ってみました。
CREATE RULE setNickname AS ON INSERT TO members
DO UPDATE members SET nickname =
CASE
WHEN NEW.nickname IS NULL THEN
NEW.name
ELSE
NEW.nickname
END
WHERE code = NEW.code; --今INSERTされたレコードを検索しているつもり。
しかし、最後のWHERE句がまずいようで、やりたいことが実現できません。
代わりに"WHERE nickname IS NULL" にしてやると思った通りのUPDATEが実行されますが、
これではちょっと乱暴な気がします。
上記のWHERE句のどこがいけないのでしょうか?
よろしくお願いします。
pgsql-jp メーリングリストの案内