Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Shiromaru

Básica com Triggers e Procedures

Recommended Posts

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

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

Pq a trigger ? Em que momento seria a média calculada ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.