Exercício 1 =========== -- criação dos tipos e das tabelas. CREATE TYPE PROFESSOR_TYPE AS OBJECT ( NOME VARCHAR2(15, DISCIPLINA VARCHAR2(15 CREATE TYPE NT_PROF_T AS TABLE OF PROFESSOR_TYPE; CREATE TYPE ALUNO_TYPE AS OBJECT( MATRICULA NUMBER, PROFESSORES NT_PROF_T CREATE TYPE NT_ALUNO_T AS TABLE OF ALUNO_TYPE; CREATE TYPE TURMA_TYPE AS OBJECT ( CODIGO VARCHAR2(3, SALA VARCHAR2(3, ALUNOS NT_ALUNO_T CREATE TABLE TURMA_TAB OF TURMA_TYPE ( CODIGO PRIMARY KEY NESTED TABLE ALUNOS STORE AS ALUNOS_T (NESTED TABLE PROFESSORES STORE AS PROF_T -- inserções INSERT INTO TURMA_TAB VALUES ('I5A', 'S9', NT_ALUNO_T( ALUNO_TYPE( 210141500, NT_PROF_T( PROFESSOR_TYPE('Fernando','GDI', PROFESSOR_TYPE('Hermano','PD', ALUNO_TYPE( 210141750, NT_PROF_T( PROFESSOR_TYPE('Silvio','HFC', PROFESSOR_TYPE('Hermano','PLP'
INSERT INTO TABLE( SELECT A.PROFESSORES FROM TABLE( SELECT T.ALUNOS FROM TURMA_TAB T WHERE T.CODIGO = 'I5A' A WHERE A.MATRICULA = 210141750 VALUES ('Ruy','IT' --atualizaçoes UPDATE TABLE( SELECT A.PROFESSORES FROM TABLE( SELECT T.ALUNOS FROM TURMA_TAB T WHERE T.CODIGO = 'I5A' A WHERE A.MATRICULA = 210141500 P SET VALUE(P= PROFESSOR_TYPE('Jacques','PD' WHERE P.DISCIPLINA='PD'; -- Consulta SELECT P.NOME, P.DISCIPLINA FROM TURMA_TAB T, TABLE(T.ALUNOS A, TABLE(A.PROFESSORES P; Exercício 2 -Elimine tabelas e tipos criados (drop --Referencias Cruzadas --Criação de Tipos CREATE TYPE EMPREGADO_TYPE AS OBJECT( ID NUMBER, NOME VARCHAR2(20, ENDERECO VARCHAR2(30 CREATE TYPE EMPREGADO_NESTED AS TABLE OF REF EMPREGADO_TYPE; CREATE TYPE PROJETO_TYPE AS OBJECT( COD NUMBER, TITULO VARCHAR2(20, GRUPO_T EMPREGADO_NESTED CREATE TYPE PROJETO_NESTED AS TABLE OF REF PROJETO_TYPE; ALTER TYPE EMPREGADO_TYPE ADD ATTRIBUTE(PROJETOS_T PROJETO_NESTED CASCADE; CREATE TABLE PROJETO_TABELA OF PROJETO_TYPE(
COD PRIMARY KEY NESTED TABLE GRUPO_T STORE AS Tab_Empregados; CREATE TABLE EMPREGADO_TABELA OF EMPREGADO_TYPE( ID PRIMARY KEY NESTED TABLE PROJETOS_T STORE AS Tab_Projetos; -- Armazena empregados INSERT INTO EMPREGADO_TABELA VALUES (1, 'Julio Marques', 'Rua Amelia', PROJETO_NESTED( INSERT INTO EMPREGADO_TABELA VALUES (2, 'Marcus Nogueira', 'Rua Bruno Veloso', PROJETO_NESTED( INSERT INTO EMPREGADO_TABELA VALUES (3, 'Vanessa Costa', 'Av Caxanga', PROJETO_NESTED( -- Armazena projetos INSERT INTO PROJETO_TABELA VALUES (1, 'Distributed XML', EMPREGADO_NESTED( INSERT INTO PROJETO_TABELA VALUES (2, 'JDBC 3', EMPREGADO_NESTED( INSERT INTO THE(Select PROJETOS_T from EMPREGADO_TABELA e WHERE e.id = 1 select REF(p from PROJETO_TABELA p where p.cod = 1; INSERT INTO THE(Select PROJETOS_T from EMPREGADO_TABELA e WHERE e.id = 2 select REF(p from PROJETO_TABELA p where p.cod = 1; INSERT INTO THE(Select GRUPO_T from PROJETO_TABELA p WHERE p.cod = 1 select REF(e from EMPREGADO_TABELA e where e.id = 1; INSERT INTO THE(Select GRUPO_T from PROJETO_TABELA p WHERE p.cod = 1 select REF(e from EMPREGADO_TABELA e where e.id = 2; -- Consultas SELECT DEREF(ss.COLUMN_VALUE FROM THE(SELECT GRUPO_T FROM PROJETO_TABELA p WHERE p.cod = 1 ss; SELECT DEREF(ss.COLUMN_VALUE FROM THE(SELECT PROJETOS_T FROM EMPREGADO_TABELA E WHERE E.ID = 1 ss; SELECT DEREF(VALUE(p.titulo FROM THE (SELECT PROJETOS_T FROM EMPREGADO_TABELA e WHERE e.nome = 'Marcus Nogueira' p; Exercício 3 -Elimine tabelas e tipos criados (drop --herança --Criação de tipos
CREATE TYPE T_PESSOA AS OBJECT( NOME VARCHAR2(30, TELEFONE VARCHAR2(20, DATA_NASCIMENTO DATE NOT FINAL; CREATE TYPE T_ALUNO UNDER T_PESSOA( MATRICULA Integer --Criação de tabela CREATE TABLE ALU_TABLE OF T_ALUNO( MATRICULA PRIMARY KEY --Inserção de dados INSERT INTO ALU_TABLE VALUES(T_ALUNO('Maria Bonita','21268430',to_date('20011980','ddmmyyyy', 45 --Consulta SELECT p.nome,p.data_nascimento FROM ALU_TABLE p WHERE p.matricula = 45; Exercício 4 -Elimine tabelas e tipos criados (drop --Member methods e nested table --Criação de tipos CREATE TYPE EMPREGADO_TP AS OBJECT ( MATRICULA INTEGER, NOME VARCHAR2(40, SALARIO NUMBER(5 CREATE TYPE EMP_NESTED AS TABLE OF EMPREGADO_TP; CREATE TYPE DEPARTAMENTO_TP AS OBJECT ( MATRICULA INTEGER, NOME VARCHAR2(40, EMPREGADOS EMP_NESTED, MEMBER FUNCTION total_empregados RETURN INTEGER, MEMBER FUNCTION total_salarios RETURN NUMBER,
INTEGER MEMBER FUNCTION numeroempregadosganhammais (numero IN INTEGER RETURN CREATE TABLE DEPARTAMENTO_TAB OF DEPARTAMENTO_TP ( MATRICULA PRIMARY KEY NESTED TABLE EMPREGADOS STORE AS EMP_T; CREATE OR REPLACE TYPE BODY DEPARTAMENTO_TP AS MEMBER FUNCTION TOTAL_EMPREGADOS RETURN INTEGER IS BEGIN RETURN SELF.EMPREGADOS.COUNT( MEMBER FUNCTION TOTAL_SALARIOS RETURN NUMBER IS CONTADOR INTEGER; TOTALSALARIO NUMBER := 0; BEGIN FOR CONTADOR IN 1..SELF.EMPREGADOS.COUNT( LOOP TOTALSALARIO := TOTALSALARIO + SELF.EMPREGADOS(CONTADOR.SALARIO; END LOOP; RETURN TOTALSALARIO; MEMBER FUNCTION NUMEROEMPREGADOSGANHAMMAIS (NUMERO IN INTEGER RETURN INTEGER IS CONTADOR INTEGER; TOTALEMPREGADOS NUMBER := 0; BEGIN FOR CONTADOR IN 1..SELF.EMPREGADOS.COUNT( LOOP IF SELF.EMPREGADOS(CONTADOR.SALARIO > NUMERO THEN TOTALEMPREGADOS := TOTALEMPREGADOS + 1; END IF; END LOOP; RETURN TOTALEMPREGADOS; -- INSERÇOES INSERT INTO departamento_tab VALUES (departamento_tp(1, 'Depto Compras', emp_nested( empregado_tp(1, 'Marcelo',1000 'Depto Compras' VALUES (empregado_tp(2,'joca',2000
'Depto Compras' VALUES (empregado_tp(3,'ana Maria',1200.75 'Depto Compras' VALUES (empregado_tp(4,'antônio André',900 INSERT INTO departamento_tab VALUES (departamento_tp(2, 'Depto Finanças', emp_nested( empregado_tp(1, 'Mônica',2100 'Depto Finanças' VALUES (empregado_tp(2,'silvério',2030 'Depto Finanças' VALUES (empregado_tp(3,'ronaldo',1200 --Consultas -- LISTAR TODOS OS DADOS DOS FUNCIONÁRIOS DO DEPARTAMENTO DE COMPRAS (USANDO THE SELECT * FROM THE(SELECT d.empregados FROM departamento_tab d WHERE d.nome = 'Depto Compras' -- LISTAR TODOS OS DADOS DOS FUNCIONÁRIOS DO DEPARTAMENTO DE COMPRAS (USANDO TABLE SELECT e.* FROM departamento_tab d, TABLE(d.empregados e WHERE d.nome = 'Depto Compras'; -- LISTAR TODOS OS DADOS DOS FUNCIONÁRIOS DO DEPARTAMENTO DE FINANÇAS (USANDO TABLE SELECT e.* FROM departamento_tab d, TABLE(d.empregados e WHERE d.nome = 'Depto Finanças'; -Listar nome, total de empregados e quantos empregados ganham mais de R$ 1.500,00 SELECT d.nome, d.total_empregados(, d.numeroempregadosganhammais(1500 FROM departamento_tab d WHERE d.nome = 'Depto Compras'
SELECT d.total_salarios( FROM departamento_tab d WHERE d.matricula = 1; SELECT d.total_salarios( from departamento_tab d where d.nome = 'Depto Finanças'; SELECT d.nome, d.total_salarios( from departamento_tab d; SELECT d.nome, d.numeroempregadosganhammais(1000 from departamento_tab d;