Alguem
da lista sabe como resolver esse problema?
Sds
Paulo
Paulo
-----Mensagem original-----
De: Paulo Rogerio Zimolo [mailto:[EMAIL PROTECTED]
Enviada em: sexta-feira, 27 de janeiro de 2006 16:36
Para: [email protected]
Assunto: STORED PROCEDURES - TRIGGERSSenhores,Tenho duas tabelas, tbl_dataliner e tbl_dataliner_total, sendo que a segunda consiste em um agrupamento de alguns dados da primeira.Como semanalmente tenho que inserir dados na tbl_dataliner (aprox 30000 registros), criei as triggers abaixo para que depois de inserir os dados na tbl_dataliner, os dados da tbl_dataliner_total sejam deletados, para que em seguida seja refeito o agrupamento dos dados da tabela tbl_dataliner para a tabela tbl_dataliner _total (ja incluindo os novos dados).Ocorre que as funcoes nao estao funcionando corretamente.Nao sei se estou fazendo do jeito certo, portanto se alguem conhecer alguma forma de fazer com que a funcao seja chamada apenas uma vez (pelo select) e nao por cada entrada, ou mesmo se puder dizer onde estou errando, eu agradeceria muito.AtenciosamentePaulo1) create trigger exc_dataliner_total after insert on tbl_dataliner for each statement execute procedure fexc_dataliner_total();2) CREATE OR REPLACE FUNCTION fexc_dataliner_total() returns trigger as
'
BEGINDELETE from tbl_dataliner_total;
RETURN OLD;
END;
'
LANGUAGE 'PLPGSQL';
3)create trigger ins_dataliner_total after delete on tbl_dataliner_total for each statement execute procedure fins_dataliner_total();4)CREATE OR REPLACE FUNCTION fins_dataliner_total() returns trigger as
'
DECLARE
reg RECORD;BEGIN
if tg_op = ''INSERT'' then
FOR reg IN SELECT fk_lporto, fk_cliente, fk_carrier, commodity, fk_odporto, fk_direction, fk_month, year, SUM(teu)::INT AS teu FROM tbl_dataliner GROUP BY fk_lporto, fk_cliente, fk_carrier, commodity, fk_odporto, fk_direction, fk_month, year
LOOP
INSERT INTO tbl_dataliner_total (fk_lporto, fk_cliente, fk_carrier, commodity, fk_odporto, fk_direction, fk_month, year, teu)
VALUES (reg.fk_lporto, reg.fk_cliente, reg.fk_carrier, reg.commodity, reg.fk_odporto, reg.fk_direction, reg.fk_month, reg.year, reg.teu);
END LOOP;
END if;
return reg;
END;
'
LANGUAGE 'PLPGSQL';
_______________________________________________ Grupo de Usuários do PostgreSQL no Brasil http://www.postgresql.org.br
