Fórum Valor null em trigger não está funcionando. #54820

18/01/2006

0

Olá

Criei um trigger para atualizar a tabela de duplicatas cfe as condições da NF entrada. Só que nas condições ´if´ que verificam se os campos estão null, não funciona. Alguém pode me ajudar. Já se vão 2 dias nisso. :?

CREATE TRIGGER ESANFF_AU0 FOR ESANFF
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  if (NEW.VL1DPL <> OLD.VL1DPL) then
  begin
    if (NEW.VL1DPL is null) then
    begin
      delete from esadup
      where ESADUP.clidup=ESANFF.FORNFF and esadup.numdup=ESANFF.NUMNFF and esadup.serdup=ESANFF.SERNFF and ESADUP.pardup=1;
    end
    else
    begin
      if (NEW.VL1DPL<OLD.VL1DPL) then
      begin
        update esadup set VENDUP=new.dt1dpl, VALDUP=new.vl1dpl
        where ESADUP.clidup=ESANFF.FORNFF and esadup.numdup=ESANFF.NUMNFF and esadup.serdup=ESANFF.SERNFF and ESADUP.pardup=1;
      end
      else
      begin
        if (NEW.VL1DPL>OLD.VL1DPL) then
        begin
          if (OLD.VL1DPL is null) then
          begin
            insert into ESADUP (CLIDUP, NUMDUP, SERDUP, PARDUP, PLADUP, EMIDUP, VENDUP, VALDUP, EMITIDO)
            values (ESANFF.FORNFF, ESANFF.NUMNFF, ESANFF.SERNFF, 1, 1, ESANFF.DATNFF, new.DT1DPL, new.VL1DPL, ´N´);
          end
          else
          begin
            update esadup set VENDUP=new.dt1dpl, VALDUP=new.vl1dpl
            where ESADUP.clidup=ESANFF.FORNFF and esadup.numdup=ESANFF.NUMNFF and esadup.serdup=ESANFF.SERNFF and ESADUP.pardup=1;
          end
        end
        else
        begin
          if (NEW.DT1DPL<>OLD.DT1DPL) then
          begin
            update esadup set VENDUP=new.dt1dpl, VALDUP=new.vl1dpl
            where ESADUP.clidup=ESANFF.FORNFF and esadup.numdup=ESANFF.NUMNFF and esadup.serdup=ESANFF.SERNFF and ESADUP.pardup=1;
          end
        end
      end
    end
  end
end



Ivonei

Ivonei

Responder

Posts

19/01/2006

Thomaz_prg

Tente substituir para o beforeUpdate. Outra coisa, esse código só será executado ao alterar. Ou seja, na inclusão ele não será executado. É esta mesmo a idéia??


Responder

Gostei + 0

19/01/2006

Ivonei

[color=blue:a7569b4942]Tente substituir para o beforeUpdate. [/color:a7569b4942]
Já tentei.

[color=blue:a7569b4942]Outra coisa, esse código só será executado ao alterar. Ou seja, na inclusão ele não será executado. É esta mesmo a idéia??[/color:a7569b4942]
Sim.

Os campos [color=green:a7569b4942]VL1DPL[/color:a7569b4942] são Double Precision. Pelo que notei, estes campos não aceitam variants (old.VL1DPL e new.VL1DPL) com valores [color=green:a7569b4942]null[/color:a7569b4942].
Para contornar, eu obriguei os campos com valores [color=green:a7569b4942]null[/color:a7569b4942] ficarem [color=green:a7569b4942]0[/color:a7569b4942].
E troquei [color=green:a7569b4942](NEW.VL1DPL is null)[/color:a7569b4942] por [color=green:a7569b4942](NEW.VL1DPL=0)[/color:a7569b4942].
Não é como eu queria, mas funcionou. :roll:

[ ]´s


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar