On Tue, Nov 16, 2010 at 21:02, Osvaldo Kussama <[email protected]>wrote:

> Em 16 de novembro de 2010 17:22, Eloi Ribeiro <[email protected]>
> escreveu:
> >
> > 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
>
>
> IF (NEW.x100 IS NOT NULL) THEN
>      NEW.x = NEW.x100/100;
> END IF;
>
> É isso? Calcular um novo x em função de x100?
>
> ====
>
> 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 (NEW.x100 IS NOT NULL) THEN
>                                 NEW.x = NEW.x100/100;
>                         END IF;
>                END IF;
>        END IF;
> END IF;
> RETURN NEW;
> END;
> $$ LANGUAGE plpgsql;
>
>
> Osvaldo
> ______________________________________________
>

Tens razão tinha ai um erro, mas mesmo assim com ultimo UPDATE (ver mais a
baixo) não se obtém o resultado esperado.
Não entendo o que está mal...

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
Resultado esperado.

UPDATE sch_temp.teste SET x = 3 WHERE x = 2;
SELECT * FROM sch_temp.teste;
1;1;100
2;3;300
Resultado esperado.

UPDATE sch_temp.teste SET x100 = 200 WHERE x = 3;
SELECT * FROM sch_temp.teste;
1;1;100
2;3;300
Resultado NÃO esperado. Deveria ser:
1;1;100
2;2;200


Eloi
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a