Dados da trigger:
Type: after
For each: row
On event: insert, delete e update
A minha duvida é se posso alterar o valor de new.* no evento after, pois
o valor que estou passando não está aplicando para a base de dados.
Teria que utilizar isso no evento before?
Obrigado !!!
Trigger
declare
vcab integer;
vdes real;
vcod integer;
begin
if tg_op = 'INSERT' then
vcab := new.id_cab;
vcod := new.id;
else
vcab := old.id_cab;
vcod := old.id;
end if;
---alterando o subtotal do cabecalho
update encomendas.tb_posto_avancado_cab set
total =
(
select sum(tot) from(
select
case when c.tipo = 1 then
case
when s.iteperdes > p.percent then
cast(functions.sp_numero_to_strf(cast(((100 -
s.iteperdes) / 100.00) * (s.itepreven * i.qtde) as numeric)) as numeric)
else
cast(functions.sp_numero_to_strf(cast(((100 - p.percent)
/ 100.00) * (s.itepreven * i.qtde) as numeric)) as numeric)
end
else cast(functions.sp_numero_to_strf(cast(((100 -
s.iteperdes) / 100.00) * (s.itepreven * i.qtde) as numeric)) as numeric)
end as tot
from encomendas.tb_posto_avancado_det i
left join encomendas.tb_posto_avancado_cab c on i.id_cab = c.id
left join public.spfil006 s on i.codprod = s.itecodite
left join encomendas.tb_posto_avancado_percent p on s.iteclaite =
p.classe
where i.id_cab = vcab
order by s.itedesite) as foo
)
where id = vcab;
---gravando os valores negociados
if (tg_op = 'INSERT') or (tg_op = 'UPDATE') then
vdes :=
(select
case when c.tipo = 1 then
case
when s.iteperdes > p.percent then
cast(functions.sp_numero_to_strf(cast(((100 -
s.iteperdes) / 100.00) * (s.itepreven * i.qtde) as numeric)) as numeric)
else
cast(functions.sp_numero_to_strf(cast(((100 - p.percent)
/ 100.00) * (s.itepreven * i.qtde) as numeric)) as numeric)
end
else cast(functions.sp_numero_to_strf(cast(((100 -
s.iteperdes) / 100.00) * (s.itepreven * i.qtde) as numeric)) as numeric)
end as tot
from encomendas.tb_posto_avancado_det i
left join encomendas.tb_posto_avancado_cab c on i.id_cab = c.id
left join public.spfil006 s on i.codprod = s.itecodite
left join encomendas.tb_posto_avancado_percent p on s.iteclaite =
p.classe
where i.id = vcod);
end if;
new.bruto := vdes;
return new;
end;
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral