Baixe o app para aproveitar ainda mais
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; /
Compartilhar