Atualizar média
08/11/2008
0
é o seguinte, eu tenho três tabelas: CANDIDATOS, QUESTOES e PROVA..
na tabela CANDIDATOS tenho um campo chamado media que tem que ser atualizada constantemente quando uma questão é inserida, vou deixar mais claro...
em QUESTOES tenho id pk
peso
e em PROVA tenho id_cand pk fk candidatos
id_questao pk fk questoes
valor_obtido
tenho que multiplicar o valor obtido na questão pelo peso da questão e depois fazer a média do candidato que vai entrar no campo média, que tem que ser atualizado sempre que uma nova questão ou prova for adicionada
estou com muitas dúvidas sobre essa questão, tentei fazer uma trigger,mas não está dando certo, gostaria da opinião de algupem que pudesse me ajudar com isso...
agradeço desde já pela ajuda
--lh-pim--
Posts
09/11/2008
Codename.v
Tente:
CREATE TRIGGER TrgExemplo ON PROVAS AFTER INSERT AS BEGIN DECLARE @ValorObtido AS FLOAT; DECLARE @PesoQuestao AS FLOAT; DECLARE @Media AS FLOAT; SET @ValorObtido = (SELECT valor_obtido FROM Inserted); SET @PesoQuestao = (SELECT peso FROM QUESTOES WHERE id = (SELECT id FROM Inserted)); SET @Media = @ValorObtido * @PesoQuestao; UPDATE CANDIDATOS SET media = @Media WHERE id_cand = (SELECT id_cand FROM Inserted); END
Esse é um trigger ´after insert´ colocado em sua tabela PROVAS, ou seja, vai ser disparado depois que novos valores forem inseridos na mesma. O valor obtido e o peso da questão serão armazenados nas variáveis @ValorObtido e @PesoQuestao respectivamente. Em seguida a média é calculada e atribuida à variável @Media que por sua vez é utilizada para alterar o campo media do candidato em questão.
Recontrui suas tabelas e testei o trigger... Funciona perfeitamente. Qualquer dúvida entre em contato!
Abraços!
09/11/2008
--lh-pim--
Agora,eu precisava criar essa trigger no Firebird, tem idéia de como eu possa fazer isso??? :?
se puder,agradecerei muito
muito obrigado pela ajuda e também muito obrigado caso possa me ajudar futuramente :wink:
09/11/2008
--lh-pim--
AS declare variable ValorObtido float; declare variable PesoQuestao float; declare variable media float; BEGIN ValorObtido = (SELECT VALOR_OBTIDO FROM inserted); PesoQuestao = (SELECT PESO_QUESTAO FROM QUESTOES WHERE ID_QUESTAO = (SELECT ID_QUESTAO FROM inserted)); media = ValorObtido * PesoQuestao; UPDATE CANDIDATOS SET media = MEDIA_CAND WHERE ID_CAND = (SELECT ID_CAND FROM inserted); end
agora ele me retorna o seguinte erro:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Subselect illegal in this context.
não estou entendendo muito bem... :?
se puder me ajudar, agradeço desde já[/code]
10/11/2008
Codename.v
Abraços!
11/11/2008
Emerson Nascimento
AS declare variable ValorObtido float; declare variable PesoQuestao float; declare variable media float; BEGIN ValorObtido := inserted.VALOR_OBTIDO; SELECT PESO_QUESTAO FROM QUESTOES WHERE ID_QUESTAO = inserted.ID_QUESTAO into :PesoQuestao; media = ValorObtido * PesoQuestao; UPDATE CANDIDATOS SET MEDIA_CAND = :media WHERE ID_CAND = inserted.ID_CAND; end
Clique aqui para fazer login e interagir na Comunidade :)