2015-02-26 9:29 GMT-03:00 Matheus Ferreira <[email protected]>:

> Bom Dia pessoal
>
>
>
> Estou tentando realizar uma função disparada por uma trigger, essa função
> deve inserir os mesmo valores da última inserção realizada de uma tabela
> para outra tabela.
>
> Sendo o último insert realizado na tabela processo2 para tabela processo.
>
> --------------------------------------------------------
>
> CREATE TABLE processo2
>
> (
>
>   idprocesso integer NOT NULL,
>
>   nrprocesso character varying(35)
>
> )
>
>
>
> CREATE TABLE processo
>
> (
>
>   idprocesso integer NOT NULL,
>
>   nrprocesso character varying(35)
>
> )
>
>
>
>
>
> ---------------------------------------------------------------
>
>
>
> create or replace function insert_processo() returns trigger as
>
> $$
>
> begin
>
>   INSERT INTO processo
>
> select * from processo2
>
>
>

Dessa forma você está pegando tudo da tabela "processo2" e inserindo em
"processo", o que você precisa é usar a variável NEW dentro da função:

    INSERT INTO processo(idprocesso, nrprocesso)
    VALUES(NEW.idprocesso, NEW.nrprocesso);

Se houver 100% de garantia que as tabelas possuem o mesmo esquema
(geralmente não há), você pode usar o seguinte truque também:

    INSERT INTO processo
    VALUES((NEW).*);

create trigger insert_processo_tri before insert on processo2
>
>   for each row execute procedure insert_processo();
>

Nesse caso me parece que a trigger deveria ser do tipo AFTER, assim você
garante que o registro foi inserido.

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a