Fórum Resultado da Stored Procedure na Trigger #58959
11/10/2007
0
Pessoal,
Bom dia!
Tenho uma rotina para cadastro de Orçamentos que envolve as seguintes
tabelas: [ORCAMENTO ORCAMENTO_PRODUTO
ORCAMENTO_SERVICO] então eu fiz uma Procedure que me retorna o valor total dos (PRODUTOS + ORÇAMENTOS) para que eu possa atualizar na tabela ORCAMENTO o campo que guarda o VALOR_TOTAL do orçamento.
Eu gostaria de executar esta Procedure através de uma Trigger que ia disparar sempre que a tabela ORCAMENTO recebesse um UPDATE pois como no sistema existe um relacionamento eu aplico a atualização nesta tabela. Seria algo mais ou menos assim que eu estava pensando:
Este codigo acima é so para ilustrar pois esta totalmente errado.
É possível fazer isso que eu descrevi? Ou teria uma maneira mais simples para fazer?
Fico no aguardo.
Abraços!
Bom dia!
Tenho uma rotina para cadastro de Orçamentos que envolve as seguintes
tabelas: [ORCAMENTO ORCAMENTO_PRODUTO
ORCAMENTO_SERVICO] então eu fiz uma Procedure que me retorna o valor total dos (PRODUTOS + ORÇAMENTOS) para que eu possa atualizar na tabela ORCAMENTO o campo que guarda o VALOR_TOTAL do orçamento.
ALTER PROCEDURE ORCAMENTO_VALOR_TOTAL ( ID_ORCAMENTO INTEGER) RETURNS ( NOVO_VALOR_TOTAL NUMERIC(15,2)) AS DECLARE VARIABLE VALOR_PRODUTO NUMERIC(15,2); DECLARE VARIABLE VALOR_SERVICO NUMERIC(15,2); begin select coalesce( SUM(QUANTIDADE * VALOR), 0 ) from ORCAMENTO_ITENS_PRODUTO where ID_ORCAMENTO = :ID_ORCAMENTO into :VALOR_PRODUTO; select coalesce( SUM(QUANTIDADE * VALOR), 0 ) from ORCAMENTO_ITENS_SERVICO where ID_ORCAMENTO = :ID_ORCAMENTO into :VALOR_SERVICO; NOVO_VALOR_TOTAL = (:VALOR_PRODUTO + :VALOR_SERVICO); suspend; end
Eu gostaria de executar esta Procedure através de uma Trigger que ia disparar sempre que a tabela ORCAMENTO recebesse um UPDATE pois como no sistema existe um relacionamento eu aplico a atualização nesta tabela. Seria algo mais ou menos assim que eu estava pensando:
ALTER TRIGGER ORCAMENTO_VALOR_TOTAL ACTIVE BEFORE UPDATE POSITION 0 AS begin /* ATUALIZAR O VALOR TOTAL DO ORÇAMENTO */ NEW.VALOR_TOTAL = (select * ORCAMENTO_VALOR_TOTAL(NEW.ID_ORCAMENTO)); end
Este codigo acima é so para ilustrar pois esta totalmente errado.
É possível fazer isso que eu descrevi? Ou teria uma maneira mais simples para fazer?
Fico no aguardo.
Abraços!
Mmoreira
Curtir tópico
+ 0
Responder
Posts
11/10/2007
Emerson Nascimento
tente assim:
ALTER TRIGGER ORCAMENTO_VALOR_TOTAL ACTIVE BEFORE UPDATE POSITION 0 AS declare VALOR_TOTAL NUMERIC(15,2)) begin /* executa a SP e obtém o valor total na variável VALOR_TOTAL */ Select NOVO_VALOR_TOTAL From ORCAMENTO_VALOR_TOTAL(NEW.ID_ORCAMENTO) into :VALOR_TOTAL; /* ATUALIZAR O VALOR TOTAL DO ORÇAMENTO */ NEW.VALOR_TOTAL = :VALOR_TOTAL; end
Responder
Gostei + 0
11/10/2007
Mmoreira
Emerson,
Era isso mesmo que eu estava precisando, testei aqui e funcionou perfeitamente.
Muito obrigado pela atenção.
Abraços!
Era isso mesmo que eu estava precisando, testei aqui e funcionou perfeitamente.
Muito obrigado pela atenção.
Abraços!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)