Trigger problem
От | mordicus |
---|---|
Тема | Trigger problem |
Дата | |
Msg-id | 9uokh2$qqc$1@news.tht.net обсуждение исходный текст |
Ответы |
Re: Trigger problem
|
Список | pgsql-general |
HI all, I have 2 tables and 1 trigger, So, if i do insert into abreviations(smot,mot,abreviation,pays) select smot,mot,abreviation,pays from a; the Trigger is executed for each row ONLY after all rows have been inserted, so the " id := currval(''abr_id'');" in my trigger have false value (always the last value after 53000 insert ...) Any way to fire a trigger really when a row is inserted ? thx ---------------------------------------- create sequence abr_id; create table a( smot varchar(40), mot varchar(40), abreviation varchar(40), ligne varchar(8), pays varchar(40) ); create table abreviations ( id int PRIMARY KEY DEFAULT nextval('abr_id'), smot varchar(40), mot varchar(40), abreviation varchar(40), date_ date, pays varchar(40), comment text ); create table pays1( id integer NOT NULL references abreviations(id) on delete cascade on update cascade, pays varchar(3) ); create table pays2( id integer NOT NULL references abreviations(id) on delete cascade on update cascade, pays varchar(3) ); create table pays3( id integer NOT NULL references abreviations(id) on delete cascade on update cascade, pays varchar(3) ); drop function AB_PAYS(); CREATE FUNCTION AB_PAYS() RETURNS OPAQUE AS ' DECLARE tpays1 char(3); tpays2 char(3); tpays3 char(3); id int; BEGIN id := currval(''abr_id''); tpays1 := substring(new.pays from 1 for 3); tpays2 := substring(new.pays from 5 for 3); tpays3 := substring(new.pays from 9 for 3); if tpays1 <> '''' then insert into pays1 values(id,tpays1); end if; if tpays2 <> '''' then insert into pays2 values(id,tpays2); end if; if tpays3 <> '''' then insert into pays3 values(id,tpays3); end if; RETURN NEW; END; ' LANGUAGE 'plpgsql'; drop trigger TAB_PAYS ON abreviations; CREATE TRIGGER TAB_PAYS AFTER INSERT OR UPDATE ON abreviations FOR EACH ROW EXECUTE PROCEDURE AB_PAYS();
В списке pgsql-general по дате отправления: