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

Responder a