Buscar

Atividade de Banco de Dados 5

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

CURSO: Análise e desenvolvimento de sistemas 
POLO DE APOIO PRESENCIAL: Higienópolis 
SEMESTRE: 3° semestre 
COMPONENTE CURRICULAR / TEMA: BANCO DE DADOS 
NOME COMPLETO DO ALUNO: MARIA BEATRIZ DA SILVA SOUZA 
TIA: 22516042 
NOME DO PROFESSOR: ELISANGELA BOTELHO GRACIAS 
 
1) Implemente um bloco PL/SQL que aumente o salário da professora ‘Camila’, obedecendo 
às seguintes regras: 
DECLARE 
 num_students INTEGER; 
BEGIN 
 SELECT COUNT(*) INTO num_students 
 FROM Aluno 
 WHERE Cod_Professor_Orientador = 
 (SELECT Cod_Professor FROM Professor WHERE Nome_Professor = 'Camila'); 
 
 IF num_students > 1 THEN 
 UPDATE Professor 
 SET Salario = Salario * 1.10 
 WHERE Nome_Professor = 'Camila'; 
 ELSE 
 
 DBMS_OUTPUT.PUT_LINE('Não teve aumento, pois não orientou mais de um aluno'); 
 END IF; 
END; 
/ 
2) Crie uma procedure que insira um aluno (já existente no banco de dados) em uma 
disciplina (também já existente no banco de dados). Ou seja, o objetivo é inserir uma nova 
linha na tabela Aluno_Disc. Serão passados os seguintes argumentos: 
CREATE OR REPLACE PROCEDURE AddStudentToDiscipline(p_student_name VARCHAR2, 
p_disc_name VARCHAR2, p_note INTEGER) AS 
 v_student_id INTEGER; 
 v_disc_id INTEGER; 
BEGIN 
 SELECT Matricula INTO v_student_id FROM Aluno WHERE Nome_Aluno = p_student_name; 
 SELECT Cod_Disciplina INTO v_disc_id FROM Disciplina WHERE Nome_Disciplina = 
p_disc_name; 
 
 INSERT INTO Aluno_Disc(Matricula, Cod_Disciplina, Nota) VALUES (v_student_id, v_disc_id, 
p_note); 
 
EXCEPTION 
 WHEN NO_DATA_FOUND THEN 
 DBMS_OUTPUT.PUT_LINE('O aluno e/ou disciplina não existe(m) no banco de dados.'); 
END AddStudentToDiscipline; 
/ 
3) Crie uma function que retorne a quantidade de disciplinas que um aluno já cursou. A função 
receberá como argumento o nome do aluno (já existente no banco de dados). 
CREATE OR REPLACE FUNCTION CountDisciplines(p_student_name VARCHAR2) RETURN 
INTEGER AS 
 v_count INTEGER; 
 
BEGIN 
 SELECT COUNT(*) INTO v_count FROM Aluno_Disc WHERE Matricula = 
 (SELECT Matricula FROM Aluno WHERE Nome_Aluno = p_student_name); 
 RETURN v_count; 
END CountDisciplines; 
/ 
4) Crie um trigger que é disparado quando a nota de um aluno em uma disciplina for 
atualizada. Se isso acontecer, o trigger deverá inserir uma nova linha na tabela 
Historico_Notas (que você deverá criar agora) com a matrícula do aluno, o nome dele, a nota 
antes da atualização, a nota atual (após a atualização) e a data em que foi feita esta 
atualização no banco de dados. 
CREATE OR REPLACE TRIGGER trg_update_note 
AFTER UPDATE OF Nota ON Aluno_Disc 
FOR EACH ROW 
BEGIN 
 INSERT INTO Historico_Notas(Matricula, Nome_Aluno, Cod_Disciplina, Nota_Antiga, 
Nota_Atual, Dt_Atualizacao) 
 VALUES (:OLD.Matricula, 
 (SELECT Nome_Aluno FROM Aluno WHERE Matricula = :OLD.Matricula), 
 :OLD.Cod_Disciplina, 
 :OLD.Nota, 
 :NEW.Nota, 
 SYSDATE); 
END trg_update_note; 
/

Continue navegando