Sequence in the rules
От | Luis Sousa |
---|---|
Тема | Sequence in the rules |
Дата | |
Msg-id | 3C70EF18.4090904@ualg.pt обсуждение исходный текст |
Ответы |
Re: Sequence in the rules
|
Список | pgsql-sql |
Hi everybody I'm running on Postgresql 7.1.3. I have four rules for update for a view, whose definition are: -- UPDATE0 CREATE RULE "infoturno_r_update0" AS ON UPDATE TO "infoturno" DO INSTEAD NOTHING; -- UPDATE1 CREATE RULE "infoturno_r_update1" AS ON UPDATE TO "infoturno" WHERE NEW.cod_disciplina != OLD.cod_disciplina OR NEW.var!= OLD.var OR NEW.tipo != OLD.tipo OR NEW.turno != OLD.turno DO INSTEAD ( SELECT infoturno_f_update1(OLD.id_e,NEW.cod_disciplina,NEW.var,NEW.tipo,NEW.turno,OLD.grau,OLD.curso,OLD.ramo,OLD."anoCurricular",OLD."anoLectivo") AS ok; ); -- UPDATE2 CREATE RULE "infoturno_r_update2" AS ON UPDATE TO "infoturno" WHERE NEW.grau != OLD.grau OR NEW.curso != OLD.curso OR NEW.ramo != OLD.ramo OR NEW."anoCurricular" != OLD."anoCurricular" DO INSTEAD ( SELECT infoturno_f_update2(OLD.id_e,OLD.grau,OLD.curso,OLD.ramo,OLD."anoCurricular",NEW.grau,NEW.curso,NEW.ramo,NEW."anoCurricular",OLD."anoLectivo") AS ok; ); -- UPDATE3 CREATE RULE "infoturno_r_update3" AS ON UPDATE TO "infoturno" WHERE (NEW.cod_disciplina != OLD.cod_disciplina OR NEW.var!= OLD.var OR NEW.tipo != OLD.tipo OR NEW.turno != OLD.turno) AND (NEW.grau != OLD.grau OR NEW.curso!= OLD.curso OR NEW.ramo != OLD.ramo OR NEW."anoCurricular" != OLD."anoCurricular") DO INSTEAD ( SELECTtest1() AS ok1; SELECT test2() AS ok2; SELECT infoturno_f_update1(OLD.id_e,NEW.cod_disciplina,NEW.var,NEW.tipo,NEW.turno,OLD.grau,OLD.curso,OLD.ramo,OLD."anoCurricular",OLD."anoLectivo") AS ok; SELECT infoturno_f_update2(OLD.id_e,OLD.grau,OLD.curso,OLD.ramo,OLD."anoCurricular",NEW.grau,NEW.curso,NEW.ramo,NEW."anoCurricular",OLD."anoLectivo") AS ok; ); The rule infoturno_r_update3 must run both functions when that condition happens, but the problem is that the first rule that is runned is infoturno_r_update1. When it passes in the rule infoturno_r_update3, the condition isn't already true, because the values were changed inside the rule that runned. How can I define that the first rule to be checked is infoturno_r_update3 and then it tries the others ? Thanks in advance. PS: I hope it's clear the definition that I use for the rules. Luis Sousa
В списке pgsql-sql по дате отправления: