Será que esta Trigger está errada?

Firebird

14/05/2004

Oi pessoal, tenho a seguinte TRIGGER abaixo descrita, como faço para que quando eu salvar a tabela de ItensEntrada, também atualize o SALDO na tabela produto?
Será que a trigger está errada, se sim favor me ajudar, pois preciso muiiiito.


CREATE TRIGGER ´ITENSENTRADA_ATUALIZA_ESTOQUE´ FOR ´ITENSENTRADA´
ACTIVE AFTER INSERT POSITION 0
AS
DECLARE VARIABLE CodProduto Integer;
DECLARE VARIABLE Saldo Integer;
DECLARE VARIABLE Quantidade Integer;
begin
SELECT SALDO FROM PRODUTO WHERE CODPRODUTO =:CODPRODUTO INTO :SALDO;
SELECT QUANTIDADE FROM ITENSENTRADA WHERE CODPRODUTO =:CODPRODUTO INTO :QUANTIDADE;
SALDO = SALDO + QUANTIDADE;
update produto
set SALDO = :Saldo
where codproduto = :codproduto;
end


Grata, Kika
:P


Kika

Kika

Curtidas 0

Respostas

Anorex

Anorex

14/05/2004

como vc sabe se vc selecionou o registro correto?

eu tive que fazer assim:

SELECT MAX(ID_ITENS_NOTA_ENTRADA) FROM ITENS_NOTA_ENTRADA INTO :ID_ITENS_NOTA_ENTRADA;
SELECT QUANTIDADE, ID_PRODUTO FROM ITENS_NOTA_ENTRADA WHERE ID_ITENS_NOTA_ENTRADA = :ID_ITENS_NOTA_ENTRADA
INTO :ITEM_QUANTIDADE, :ITEM_ID_PRODUTO;
SELECT QUANTIDADE FROM PRODUTOS WHERE ID_PRODUTO = :ITEM_ID_PRODUTO INTO :QUANTIDADE_PROD;
UPDATE PRODUTOS SET QUANTIDADE = :QUANTIDADE_PROD + :ITEM_QUANTIDADE WHERE ID_PRODUTO = :ITEM_ID_PRODUTO;


GOSTEI 0
Kika

Kika

14/05/2004

Anorex, eu já estou pedindo para atualizar na TRIGGER “ITENSENTRADA_ATUALIZA_ESTOQUE´ FOR ´ITENSENTRADA´
ACTIVE AFTER INSERT POSITION 0, a trigger não deveria atualizar?
Porque não faz isto?
Deveria declarar essa Trigger em algum lugar?


Grata, Kika


GOSTEI 0
Anorex

Anorex

14/05/2004

Kika, eu também penso igual a você...

eu fazia igual a você está fazendo e não dava certo... quando fiz deste jeito que postei deu certo....

com o SQL Server tem uma variável que armazena estes valores que estão sendo inseridos/alterados mas no ib/fb não descobri se existe essas variáveis


GOSTEI 0
Everton

Everton

14/05/2004

Kika,

não sei o SGDB que você usa. Talvez este código te ajude.

CREATE TRIGGER "ITENSENTRADA_ATUALIZA_ESTOQUE" FOR "ITENSENTRADA" 
ACTIVE AFTER INSERT POSITION 0 
AS 
DECLARE VARIABLE Saldo Integer; 
begin 
SELECT SALDO FROM PRODUTO WHERE CODPRODUTO = NEW.COD_PRODUTO INTO :SALDO; 

update produto 
set SALDO = :Saldo + New.Quantidade
where codproduto = NEW.codproduto; 
end 



GOSTEI 0
POSTAR