Valor null em trigger não está funcionando.
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. :?
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
Curtidas 0
Respostas
Thomaz_prg
18/01/2006
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??
GOSTEI 0
Ivonei
18/01/2006
[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
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
GOSTEI 0