Shiromaru 0 Denunciar post Postado Dezembro 12, 2008 Boa tarde caros amigos. Necessito fazer uma trigger que chame uma procedure e que então chame uma function para calculo de notas em uma tabea de alunos. -A procedure e a Trigger deverão chamar a função para calcular a média. -A média poderá ser calculada somente se as duas notas da média estiverem preenchidas. ou seja se a M1_nota1 e M1_nota2 estiverem preenchidas, o banco calcula a media_M1 automaticamente. o mesmo acontece com a média2, a média 3 e a média final. o que eu criei ate agora foi create table alunos ( codigo int NOT NULL, nome VARCHAR(30) NOT NULL, m1_1 float, m1_2 float, m1_media float, m2_1 float, m2_2 float, m2_media float, m3_1 float, m3_2 float, m3_media float, media_final float, Primary key (codigo) ) insert into alunos (codigo,nome) values (0000, 'Rafael'); insert into alunos (codigo,nome) values (0001, 'Carlos'); insert into alunos (codigo,nome) values (0002, 'Bruna'); insert into alunos (codigo,nome) values (0003, 'Tatiana'); insert into alunos (codigo,nome) values (0004, 'José'); insert into alunos (codigo,nome) values (0005, 'Augusto'); CREATE OR REPLACE FUNCTION CALCULA_MEDIA (nota1 float, nota2 float) return float is media float; begin media:= (nota1+nota2)/2; return media; end; / CREATE OR REPLACE FUNCTION CALCULA_MEDIA_FINAL (nota1 float, nota2 float, nota3 float) return float is media float; begin media:= (nota1+nota2+nota3)/3; return media; end; / As functions funcionam direitinho, mas não estou conseguindo fazer a procedure e a trigger que chame a procedure. Será que poderiam me dar uma ajudinha? Compartilhar este post Link para o post Compartilhar em outros sites
Shiromaru 0 Denunciar post Postado Dezembro 12, 2008 Ja tenho a procedure também agora, falta apenas a trigger... como faço pra obter o código do aluno do registro que atualizei? CREATE OR REPLACE PROCEDURE altera (cod INT) IS m11 FLOAT; m12 FLOAT; m21 FLOAT; m22 FLOAT; m31 FLOAT; m32 FLOAT; m1media FLOAT; m2media FLOAT; m3media FLOAT; BEGIN SELECT m1_1, m1_2 INTO m11, m12 FROM alunos WHERE codigo=cod; SELECT m2_1, m2_2 INTO m21, m22 FROM alunos WHERE codigo=cod; SELECT m3_1, m3_2 INTO m31, m32 FROM alunos WHERE codigo=cod; IF m11 IS NOT NULL AND m22 IS NOT NULL THEN UPDATE alunos SET m1_media=calcula_media(m11,m12) WHERE codigo=cod; END IF; IF m21 IS NOT NULL AND m22 IS NOT NULL THEN UPDATE alunos SET m2_media=calcula_media(m21,m22) WHERE codigo=cod; END IF; IF m31 IS NOT NULL AND m32 IS NOT NULL THEN UPDATE alunos SET m3_media=calcula_media(m31,m32) WHERE codigo=cod; END IF; SELECT m1_media, m2_media, m3_media INTO m1media, m2media, m3media FROM alunos WHERE codigo=cod; IF m1media IS NOT NULL AND m2media IS NOT NULL AND m3media IS NOT NULL THEN UPDATE alunos SET media_final=calcula_media_final(m1_media,m2_media,m3_media) WHERE codigo=cod; END IF; commit; END; / Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Dezembro 15, 2008 Pq a trigger ? Em que momento seria a média calculada ? Compartilhar este post Link para o post Compartilhar em outros sites