[pgsql-jp: 32979] Re: NEW もしくは OLD に別名を与える方法は?
Jun Kitamura
kitamura @ zoozee.jp
2004年 5月 20日 (木) 20:52:08 JST
北村です。
> 藤井です
>
> 北村さん、またまたサポートして頂きありがとうございます。
いえいえ。お役に立てませんで・・。
> > SELECT NEW.* into rec;
> > で出来ませんか?
(略)
> 以下のように記述して、早速試してみました。
> DECLARE
> rec RECORD ;
> BEGIN
> SELECT NEW.* INTO rec ;
>
> 結果はやはりエラーでした。
> エラーは以下のとおりです。
> WARNING: Error occurred while executing PL/pgSQL function func_name
> WARNING: line n at select into variables
> SQL実行中に以下のエラーが発生しました。
> ERROR: NEW used in non-rule query
select NEW.* という行為がダメみたいですね。
カラムをひとつずつ入れてやる方法はOKみたいなんですが、こんな
ことするなら、NEW か OLD で分けたほうが早いですねw。
例
create table tpoi(a int4, b int4);
create or replace function fpoi() returns TRIGGER as
'
DECLARE
rec RECORD;
BEGIN
-- rec を型にはめる
select * into rec from tpoi where false;
-- ひとつずつ入れる
-- select NEW.* into rec; や rec := NEW; はダメみたい
rec.a := NEW.a;
rec.b := NEW.b;
-- 以下何かの処理
RETURN NEW;
END;
'
language 'plpgsql'
SECURITY DEFINER;
create trigger poi
before INSERT on tpoi for each row
execute procedure fpoi();
> #今回は、OLD用INSERT文とNEW用INSERT文を記述することで
> この問題を回避しました。
これが正当な方法な気がします(いまさらながらw)。
失礼しました。
pgsql-jp メーリングリストの案内