problema no uso de store procedure com trigger

04/04/2003

0

veja o código abaixo:

SET TERM ^;
CREATE PROCEDURE PRODLOTE_INSNFR_PROCED(PRODUTO_E INTEGER, VALIDADE_E DATE, LOTE_E VARCHAR(15), QTDE_E FLOAT, VAL_PRODUTO_E FLOAT)
RETURNS (SLD_S FLOAT, PRE_MEDIO_S FLOAT)
AS
DECLARE VARIABLE ´PRODUTO_V´ INTEGER;
DECLARE VARIABLE ´VALID_V´ DATE;
DECLARE VARIABLE ´LOTE_V´ VARCHAR(15);
DECLARE VARIABLE ´QTDE_V´ FLOAT;
DECLARE VARIABLE ´SLD_ATUAL_V´ FLOAT;
DECLARE VARIABLE ´PRE_MEDIO_V´ FLOAT;
BEGIN

/*ATUALIZA SALDO DO LOTE*/

FOR SELECT COD_PRODUTO FROM PRODLOTE WHERE COD_PRODUTO=:PRODUTO_E AND VALIDADE=:VALIDADE_E
AND COD_LOTE=:LOTE_E INTO :PRODUTO_V
DO
BEGIN
IF (:PRODUTO_V IS NULL) THEN
BEGIN
INSERT INTO PRODLOTE (COD_PRODUTO, VALIDADE, COD_LOTE, QTDE_PRODUTO)
VALUES (:PRODUTO_E, :VALIDADE_E, :LOTE_E, :QTDE_E);
END
ELSE
/*QTDE_NEW=:QTDE_E+:QTDE;*/
UPDATE PRODLOTE SET QTDE_PRODUTO=QTDE_PRODUTO+:QTDE_E
WHERE COD_PRODUTO=:PRODUTO_E AND VALIDADE=:VALIDADE_E AND COD_LOTE=:LOTE_E;

/*ATUALIZA SALDO DO PRODUTO*/

FOR SELECT COD_PRODUTO, SLD_ATUAL,PRE_MEDIO FROM PRODUTO WHERE COD_PRODUTO=:PRODUTO_E
INTO :PRODUTO_V,:SLD_ATUAL_V,PRE_MEDIO_V
DO
BEGIN
SLD_S=:SLD_ATUAL_V+:QTDE_E;
IF ((:PRE_MEDIO_V<>0) AND (:VAL_PRODUTO_E>0)) THEN
PRE_MEDIO_S=((:SLD_ATUAL_V*PRE_MEDIO_V)+(QTDE_E*VAL_PRODUTO_E))/(:SLD_ATUAL_V+QTDE_E);
IF ((:PRE_MEDIO_V=0) AND (:VAL_PRODUTO_E>0)) THEN
PRE_MEDIO_S=:VAL_PRODUTO_E;
UPDATE PRODUTO SET SLD_ATUAL=:SLD_S,PRE_MEDIO=:PRE_MEDIO_S
WHERE COD_PRODUTO=:PRODUTO_E;
END
END
END^
SET TERM ;^



SET TERM ^;
CREATE TRIGGER ´PRODLOTE_INSNFR_TG´ FOR ´DETNFR´
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE SLD_ATUAL_V FLOAT;
DECLARE VARIABLE PRE_MEDIO_V FLOAT;
BEGIN
EXECUTE PROCEDURE PRODLOTE_INSNFR_PROCED NEW.COD_PRODUTO, NEW.VALIDADE, NEW.COD_LOTE,
NEW.QTDE_PRODUTO, NEW.VAL_PRODUTO RETURNING_VALUES :SLD_ATUAL_V, :PRE_MEDIO_V;
NEW.SLD_PRODUTO=:SLD_ATUAL_V;
NEW.PRE_MED_PRODUTO=:PRE_MEDIO_V;
NEW.VAL_SLD_PRODUTO=:PRE_MEDIO_V*:SLD_ATUAL_V;

END
^
COMMIT WORK ^
SET TERM ;^

acho que as variaveis de return do store SLD_S FLOAT e PRE_MEDIO_S estão retornando vazio para a trigger onde os campos que recebem seus valores são obrigatórios nao permitindo que haja a inserção da tabela DETCABNFR. Mas o problema é que ambas recebem valores na store. e agora? Como posso resolver isto? Me ajudem por favor


Marcio Nogueira

Marcio Nogueira

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