Ajuda com Função

31/10/2011

0

Pessoal estou com dificuldades em localizar a falha na função abaixo , estou recenbendo sempre esse erro na de inserir (control reached and of trigger procedure without return tradução google(controle de processo e chegou a disparar sem retorno)), será que alguem consegue me ajudar :


CREATE OR replace function fc_estoque() returns trigger AS
DECLARE
wcodest INTEGER;
wdata DATE;
wfornecedor CHAR(60);
wcodpro CHAR(6);
wcodfor CHAR(6);
vMovEst char(1) ;
BEGIN
if (TG_OP = INSERT)or(tg_op = UPDATE) then
select into vMovEst estoque_nf_entrada from emp where codemp = new.codemp;
else
select into vMovEst estoque_nf_entrada from emp where codemp = old.codemp;
end if;

if (TG_OP = INSERT) and (vMovEst=S) THEN -- novo registro em item_nf_entrada
--verifica se este produto movimenta estoque
SELECT INTO wcodpro mat.codmat FROM mat,grm WHERE mat.codmat = new.codpro AND mat.movest = S AND grm.movest = S AND grm.codgrm = mat.codgrm;

SELECT INTO wdata item_nf_entrada.data_competencia FROM item_nf_entrada WHERE item_nf_entrada.codnf_entr = new.codnf_entr and item_nf_entrada.codemp=new.codemp;
if (NOT(wcodpro IS NULL)) and (new.qtd01 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd01*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam01);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd02 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd02*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam02);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd03 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd03*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam03);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd04 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd04*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam04);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd05 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd05*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam05);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd06 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd06*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam06);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd07 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd07*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam07);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd08 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd08*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam08);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd09 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd09*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam09);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd10 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd10*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam10);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd11 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd11*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam11);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd12 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd12*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam12);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd13 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd13*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam13);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd14 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd14*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam14);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd15 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd15*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam15);

END if;

if (NOT(wcodpro IS NULL)) and (new.qtd16 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd16*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam16);

END if;
END if;
if (tg_op = UPDATE)and (vMovEst=S) THEN -- se for uma atualizacao na tab item_nf_entrada
if (new.codpro <> old.codpro) then
delete from mem where codmat = old.codpro AND nrdoc = old.codnf_entr AND tipodoc = NF and codemp=old.codemp;
end if;
SELECT INTO wdata item_nf_entrada.data_competencia FROM item_nf_entrada WHERE item_nf_entrada.codnf_entr = new.codnf_entr and item_nf_entrada.codemp=new.codemp;
SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam01 and codemp=new.codemp;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd01*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam01 and codemp=new.codemp;
END if;
if(wcodest IS NULL) and (new.qtd01 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd01*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam01);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam02 and codemp=new.codemp;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd02*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam02 and codemp=new.codemp;
END if;
if(wcodest IS NULL) and (new.qtd02 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd02*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam02);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam03 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd03*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam03 and codemp=new.codemp;
END if;
if(wcodest IS NULL) and (new.qtd03 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd03*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam03);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam04 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd04*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam04 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd04 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd04*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam04);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam05 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd05*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam05 and codemp=new.codemp;
END if;
if(wcodest IS NULL) and (new.qtd05 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd05*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam05);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam06 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd06*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam06 and codemp=new.codemp;
END if;
if(wcodest IS NULL) and (new.qtd06 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd06*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam06);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam07 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd07*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam07 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd07 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd07*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam07);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam08 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd08*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam08 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd08 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd08*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam08);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam09 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd09*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam09 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd09 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd09*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam09);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam10 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd10*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam10 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd10 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd10*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam10);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam11 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd11*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam11 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd11 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd11*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam11);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam12 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd12*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam12 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd12 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd12*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam12);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam13 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd13*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam13 and codemp=new.codemp;
END if;
if(wcodest IS NULL) and (new.qtd13 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd13*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam13);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam14 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd14*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam14 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd14 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd14*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam14);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam15 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd15*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam15 and codemp=new.codemp ;
END if;
if(wcodest IS NULL) and (new.qtd15 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd15*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam15);
END if;

SELECT INTO wcodest codest FROM mem WHERE codmat = new.codpro AND nrdoc = new.codnf_entr AND tipodoc = NF and tam = new.tam16 and codemp=new.codemp ;
if (NOT(wcodest IS NULL)) THEN -- se já existe o lancamento em mem, atualiza
UPDATE mem SET DATA=wdata , quant= new.qtd16*new.qtde_fracionada, valor = new.vlruni,descricao = ENTRADA NOTA FISCAL - ||new.num_nf WHERE codest = wcodest and tam = new.tam16 and codemp=new.codemp;
END if;
if(wcodest IS NULL) and (new.qtd16 > 0) THEN
SELECT INTO Wcodest MAX(codest)+1 FROM mem;
if wcodest IS NULL THEN
wcodest := 1;
END if;
INSERT INTO mem (codest,codmat,descricao,nrdoc,quant,valor,tipodoc,tipo,data,codemp,codfor,tam)VALUES(wcodest,new.codpro,ENTRADA NOTA FISCAL - ||new.num_nf,new.codnf_entr,new.qtd16*new.qtde_fracionada,new.vlruni,NF,1,wdata,new.codemp,new.codfor,new.tam16);
END if;
END if;

if (tg_op = DELETE)and(vMovEst=S) THEN --exclusao na tab item_nf_entrada
SELECT INTO wcodest codest FROM mem WHERE codmat = old.codpro AND nrdoc = old.codnf_entr AND tipodoc = NF and codemp=old.codemp;
if NOT wcodest IS NULL THEN --se encontra o lancamento em mem, exclui
DELETE FROM mem WHERE codest = wcodest;
END if;
return old;
END if;

if ((TG_OP = INSERT)or(tg_op = UPDATE)) and (vMovEst<>S) then
return new;
end if;

if (TG_OP = DELETE) and (vMovEst<>S) then
return old;
end if;


END; LANGUAGE plpgsql;


Jorge

Jorge

Responder

Posts

31/10/2011

Leandro

se vc esta criando uma função acredito que deve ter um retorno especificado.

exemplo:

CREATE or REPLACE FUNCTION getSaldoProduto(pEmpresa VARCHAR(3),pProduto VARCHAR(12))
RETURNS NUMERIC AS $$
DECLARE
Responder

31/10/2011

Jorge

No caso essa função será chamada pela trigger (returns trigger AS) :

CREATE trigger tg_item_nf_entrada after INSERT OR UPDATE OR DELETE ON item_nf_entrada
FOR each ROW EXECUTE PROCEDURE fc_estoque();

Tentei colocar da forma como citado acima e não deu certo da erro de sintaxe ...

Tenho outras menores da mesma forma e funciona agora essa está me deixando de cabelo em pé ...
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar