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

Responder a