Простейший триггер

Youra Polishuk
Дата: 23.04.2004 09:01:13
Взгляните на этот триггер, где у меня ошибка.
Как я его вставляю в базу не может быть добавлена запись в таблицу
authreg. Мне нужно, чтобы после добавления записи в таблицу authreg
в таблицу public."roster-items" добавились новые записи.
Может можно как-то сделать триггерную функ. Чтобы после добавления в таблицу authreg новой записи все старые попадали в функцию, а оттуда я бы их вставлял в табл. "roster-items".

CREATE OR REPLACE FUNCTION trig_f_adduser() RETURNS OPAQUE AS'
DECLARE
varchar(256) user_p;
varchar(256) realm_p;
BEGIN
SELECT username,realm INTO user_p,realm_p FROM authreg WHERE username<>NEW.username;
insert into public."roster-items"
values(NEW.username||''@''||NEW.realm,nextval(object-sequence),user_p||''@''||realm_p,user_p,true,true,0);
RETURN NEW;
END;
'language 'plpgsql';

CREATE TRIGGER adduser AFTER INSERT ON authreg FOR EACH ROW EXECUTE
PROCEDURE trig_f_adduser();
Чем будет отличаться если будет FOR EACH STATEMENT?
Sad Spirit
Дата: 23.04.2004 10:34:33
Эээ... Работать не будет? ;)
centur
Дата: 10.05.2004 22:05:33
да, работать не будет т.к. не будет NEW в for each statement


объясни подробней что нужно добавлять в roster-items - все записи кроме текущей из authreg ?
тогда имхо
insert into roster items (select * from authreg where oid!=NEW.oid) (или тут user!=NEW.user, а если повесить триггер на before то вроде как от where можно отказаться - в момент before зпись в таблице еще не вставлена, так что все что есть в ней - старые записи)

только тогда у тебя roster-items будет расти быстро - на каждую новую строку в authreg у тебя в roster будет класться копия таблицы authreg