Lista de estudos banco de dados
Professor: Robson Fidalgo (rdnf@cin.ufpe.br)
Equipe de monitoria: [acmh, gbl, irsl, jts2, jgms, kbc, mlnr, mirn, smdr, tsm, voo]@cin.ufpe.br Questão 1
Adicione a tp_empregado dois métodos: uma função que retorne a idade do funcionário e um procedimento que use a função anterior para imprimir o nome, a idade e o salário de um funcionário.
Execute o procedimento para o chefe do departamento de código 1
RALTER TYPE tp_empregado
ADD MEMBER FUNCTION getIdade RETURN NUMBER CASCADE;
ALTER TYPE tp_empregado
ADD MEMBER PROCEDURE printInfo CASCADE;
CREATE OR REPLACE TYPE BODY tp_empregado AS
MEMBER FUNCTION getIdade RETURN NUMBER IS
BEGIN
RETURN ((SYSDATE - dt_nasc)/365);
END;
MEMBER PROCEDURE printInfo IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Nome: ' || nome);
DBMS_OUTPUT.PUT_LINE('Idade: ' || SELF.getIdade());
DBMS_OUTPUT.PUT_LINE('Salario: ' || salario);
END;
END;
/
DECLARE emp tp_empregado;
BEGIN
SELECT DEREF (ref_chefe) INTO emp
FROM tb_departamento
WHERE codigo = 1; emp.printInfo(); END;
/
Questão 2
Altere o tipo Empregado para incluir um método MAP de ordenação. Esse método deverá ser implementado de maneiras diferentes para Técnico e Graduado. No caso de Graduado, a ordenação será feita de acordo com o número do CPF; já para Técnico, será utilizado o produto do CPF pela última série cursada. Depois disso, faça uma consulta SQL que retorne o nome e o CPF de todos os empregados que já trabalharam na empresa, ordenando pelo empregado.
R--criando o método em tp_empregado, visto que não é possível criar método MAP apenas no subtipo.
Note que não será criado corpo do tipo (método abstrato).
ALTER TYPE tp_empregado
ADD MAP MEMBER FUNCTION empToInt RETURN NUMBER CASCADE;
--altera-se tp_tecnico para adicionar o método MAP específico do subtipo (através do OVERRIDING)
ALTER TYPE tp_tecnico
ADD OVERRIDING MAP MEMBER FUNCTION empToInt RETURN NUMBER CASCADE;
--cria-se o corpo de tp_tecnico, com a definição do método
CREATE OR REPLACE TYPE