On Tue, Nov 16, 2010 at 19:34, Osvaldo Kussama <[email protected]>wrote:
> Em 16 de novembro de 2010 14:33, Eloi Ribeiro <[email protected]> > escreveu: > > > > Obrigado Osvaldo, era isso mesmo que queria fazer. > > Apenas nao funciona o ultimo UPDATE. > > Simplificando o exemplo anterior: > > --DROP TABLE sch_temp.teste; > > CREATE TABLE sch_temp.teste (id serial primary key, x int, x100 int); > > CREATE OR REPLACE FUNCTION funcao_teste() RETURNS trigger AS > > $$ > > BEGIN > > IF (TG_OP = 'INSERT') THEN > > IF (NEW.x IS NOT NULL) THEN > > NEW.x100 = NEW.x*100; > > ELSE > > NEW.x = NEW.x100/100; > > END IF; > > ELSE > > IF (TG_OP = 'UPDATE') THEN > > IF (NEW.x IS NOT NULL) THEN > > NEW.x100 = NEW.x*100; > > ELSE > > IF (OLD.x100 IS NOT NULL) THEN > > NEW.x = NEW.x/100; > > END IF; > > END IF; > > END IF; > > END IF; > > RETURN NEW; > > END; > > $$ LANGUAGE plpgsql; > > DROP TRIGGER IF EXISTS funcao_teste ON sch_temp.teste; > > CREATE TRIGGER funcao_teste BEFORE INSERT OR UPDATE ON sch_temp.teste FOR > > EACH ROW EXECUTE PROCEDURE funcao_teste(); > > INSERT INTO sch_temp.teste(x) VALUES(1); > > INSERT INTO sch_temp.teste(x100) VALUES (200); > > SELECT * FROM sch_temp.teste; > > 1;1;100 > > 2;2;200 > > Os INSERTS funcionam na perfeição. > > UPDATE sch_temp.teste SET x = 3 WHERE x = 2; > > SELECT * FROM sch_temp.teste; > > 1;1;100 > > 2;3;300 > > O primeiro UPDATE também. > > UPDATE sch_temp.teste SET x100 = 200 WHERE x = 3; > > SELECT * FROM sch_temp.teste; > > 1;1;100 > > 2;3;300 > > Excepto este ultimo que não dispara. Porque? > > Aqui o resultado deveria ser: > > 1;1;100 > > 2;2;200 > > Obrigado por toda a ajuda. > > Eloi > > > Creio que você precisa rever quais testes devem ser feitos. > Talvez: > IF (OLD.x100 IS NOT NULL) THEN > NEW.x = NEW.x/100; > END IF; > deva, na realidade ser: > IF (NEW.x100 IS NOT NULL) THEN > NEW.x = NEW.x/100; > END IF; > > Eu não entendi muito bem se sempre que atualizar uma coordenada a > outra deve ser automaticamente modificada ou se isto depende de alguma > outra informação ou pré-existência de dados. > > Osvaldo > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > Com esta ultima alteração os resultados são os mesmos. Nao existe nenhuma outra dependência, ao actualizar uma coordenada a outra deve ser automaticamente modificada. Eloi
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
