Resultado da Stored Procedure na Trigger
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
Curtidas 0
Respostas
Emerson Nascimento
11/10/2007
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
GOSTEI 0
Mmoreira
11/10/2007
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!
GOSTEI 0