Ir para conteúdo

Arquivado

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

Alexandre Di Salvo

procedure e trigger

Recommended Posts

Olá a todos.

 

Estou fazendo um projeto pessoal de um banco de dados de um controle acadêmico, que posteriormente pretendo unir a PHP ou java(ainda estou vendo). Pois bem, gostaria de criar uma procedure que inserisse na tabela faltosos os alunos que não compareceram a nenhuma avaliação.

 

Minha base de dados está assim:

 

CREATE TABLE disciplinas (
 cod_disc INT NOT NULL,
 nome_disc VARCHAR(50) NULL,
 PRIMARY KEY(cod_disc)
);

CREATE TABLE Notas (
 Cod_nota INT NOT NULL,
 Nome_nota VARCHAR(50) NULL,
 Peso DOUBLE NULL,
 PRIMARY KEY(Cod_nota)
);

CREATE TABLE Cursos (
 cod_curso INT NOT NULL,
 nome_curso VARCHAR(50) NULL,
 PRIMARY KEY(cod_curso)
);

CREATE TABLE Alunos (
 matricula INT NOT NULL,
 Nome_aluno VARCHAR(50) NULL,
 Data_nasc DATE NULL,
 cod_curso INT NULL,
 PRIMARY KEY(matricula),
 FOREIGN KEY Rel_03(cod_curso)
	REFERENCES Cursos(cod_curso)
 	ON DELETE NO ACTION
 	ON UPDATE NO ACTION
);

CREATE TABLE medias (
 matricula INT NOT NULL,
 cod_disc INT NOT NULL,
 media DOUBLE NULL,
 PRIMARY KEY(matricula, cod_disc),
 FOREIGN KEY Rel_06(matricula)
	REFERENCES Alunos(matricula)
 	ON DELETE NO ACTION
 	ON UPDATE NO ACTION,
 FOREIGN KEY Rel_07(cod_disc)
	REFERENCES disciplinas(cod_disc)
 	ON DELETE NO ACTION
 	ON UPDATE NO ACTION
);

CREATE TABLE Avaliacoes (
 matricula INT NOT NULL,
 cod_disc INT NOT NULL,
 cod_nota INT NOT NULL,
 data_aval DATE NULL,
 nota DOUBLE NULL,
 PRIMARY KEY(matricula, cod_disc, cod_nota),
 FOREIGN KEY Rel_02(matricula)
	REFERENCES Alunos(matricula)
 	ON DELETE NO ACTION
 	ON UPDATE NO ACTION,
 FOREIGN KEY Rel_04(cod_disc)
	REFERENCES disciplinas(cod_disc)
 	ON DELETE NO ACTION
 	ON UPDATE NO ACTION,
 FOREIGN KEY Rel_05(Cod_nota)
	REFERENCES Notas(Cod_nota)
 	ON DELETE NO ACTION
 	ON UPDATE NO ACTION
);

CREATE TABLE faltosos (
 matricula INT NOT NULL,
 nome_aluno varchar(50) not null,
 nome_curso VARCHAR(50) not NULL,
 PRIMARY KEY(matricula)
);

Como podem ver, a tabela faltosos não tem relacionamento e ligação com nenhuma, ela é somente uma tabela de ''backup'' onde eu tenho a Matricula do aluno, nome e o curso.

 

E ai, alguma ideia pra eu fazer essa procedure?

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Faltosos se relaciona com Aluno (matricula), não ?

2) Uma trigger é um código disparado por um evento em uma tabela , não vejo como uma trigger pode alimentar Faltosos , pois é justamente uma informação faltante.

3) Creio que uma procedure que verifique Alunos que não tiveram avaliações ajude :

 

SELECT MATRICULA,NOME
FROM ALUNO
WHERE NOR EXISTS (SELECT NULL
                  FROM AVALIACAO
                  WHERE AVALIACAO.MATRICULA = ALUNO.MATRICULA)

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Faltosos se relaciona com Aluno (matricula), não ?

2) Uma trigger é um código disparado por um evento em uma tabela , não vejo como uma trigger pode alimentar Faltosos , pois é justamente uma informação faltante.

3) Creio que uma procedure que verifique Alunos que não tiveram avaliações ajude :

 

SELECT MATRICULA,NOME
FROM ALUNO
WHERE NOR EXISTS (SELECT NULL
 FROM AVALIACAO
 WHERE AVALIACAO.MATRICULA = ALUNO.MATRICULA)

Então vou testar e implementar essa sua procedure. Quanto a trigger que você falou, acabei esquecendo de postar a dúvida de trigger http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

 

EDITADO:

 

Fiz a Procedure com mais alguns incrementos e ficou assim:

 

CREATE PROCEDURE INS_FALTOSOS()

	BEGIN

		DECLARE MAT INT;
		DECLARE NOME VARCHAR(50);
		DECLARE CURSO VARCHAR(50);
	
		SELECT AL.MATRICULA, AL.NOME_ALUNO INTO MAT, NOME FROM ALUNOS AL WHERE NOT EXISTS (SELECT NULL FROM AVALIACOES AV WHERE AV.MATRICULA = 	AL.MATRICULA);
	
		SELECT C.NOME_CURSO INTO CURSO FROM CURSOS C WHERE C.COD_CURSO = MAT;
	
		INSERT INTO FALTOSOS VALUES(MAT, NOME, CURSO);

	END

Voltando ao assunto da trigger, esqueci de postar, mas irei tentar fazer de novo, em caso de alguma dúvida eu posto o problema. Mas me surgiu a necessidade de fazer uma outra procedure, agora que já recuperei os nomes dos faltosos, irei atualizar a tabela de médias. Nesta eu gravo a matricula, a disciplina e sua respectiva média dessa disciplina. Antes precisarei percorrer Avaliações e depois Notas. Irei precisar de um CURSOR?

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.