Conceitos de SGBD ObjetoRelacional Oracle 10 g 2
Conceitos de SGBD Objeto-Relacional Oracle 10 g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina
Aula e Script www/~dsrm/gdi
3 Caso de estudo
Roteiro ▫ ▫ INSERTS e SELECT Outros Operadores importantes Herança e Funções Coleções de coleções
Exercício 1. Realizar INSERT em todas as tabelas 1. Cliente_tab 2. Item. Estoque_tab 3. Pedido_tab 2. Realizar SELECTs 1. Ver script!
21 © CIn/UFPE 6 Predicados úteis com objetos • VALUE • REF • DREF
21 © CIn/UFPE 7 Operador VALUE • VALUE - Retorna instância da object table ou object view select value(c) from cliente_tab c where c. idcliente = 1;
21 © CIn/UFPE 8 Tipo REF • REF - Retorna referência OID(object id) a uma instância da object table • Um objeto do tipo REF encapsula uma referência para um “row object” de um tipo de objeto especificado; • O valor de um objeto do tipo REF é um “ponteiro lógico” para um row object. Select ref(s) from itemestoque_tab s where s. id. Estoque = 1004;
21 © CIn/UFPE 9 Tipo DREF • DEREF - Retorna instância de objeto correspondente ao REF • O operador DEREF executa a função oposta de REF — recebe um valor de referência e retorna o valor de um “row object”. O DEREF toma como argumento o OID gerado para uma referência. SELECT DEREF(p. Cliente_ref), p. entregar. No. Endereco_obj, p. id. Pedido, item_ntab FROM Pedido_tab p WHERE p. id. Pedido = 1001 ;
10 Herança © CIn/UFPE 10/24/2021 • Apenas herança simples é permitida no ORACLE Controle do usuário sobre a definição de tipos e métodos “herdáveis” - FINAL e NOT FINAL
21 Herança © CIn/UFPE 11 • Tipos de objetos abstratos CREATE TYPE <TIPO> AS OBJECT(. . . ) NOT INSTANTIABLE; Para permitir que um tipo possa ter subtipos, este deve ser definido como NOT FINAL CREATE TYPE <TIPO> AS OBJECT( <definição de atributos>. . . ) NOT FINAL;
21 Herança © CIn/UFPE 12 • Métodos FINAL e NOT FINAL • Para permitir que um método não possa ser sobrescrito nos subtipos, este deve ser definido como FINAL • Por padrão, um método é definido como NOT FINAL CREATE TYPE <TIPO> AS OBJECT( <definição de atributos> FINAL MEMBER FUNCTION <NOME> RETURN <TIPO>. . . ) NOT FINAL;
21 © CIn/UFPE 13 Herança • Criando Subtipos CREATE TYPE <SUB-TIPO> UNDER <TIPO>( <definição de atributos> );
21 © CIn/UFPE 14 Exemplo • Dada a situação Pessoa Aluno Definir tipos usando herança
15 © CIn/UFPE 10/24/2021 Exercício 3 – Criação de Tipos CREATE TYPE T_PESSOA AS OBJECT( NOME VARCHAR 2(30), TELEFONE VARCHAR 2(20), DATA_NASCIMENTO DATE ) NOT FINAL NOT INSTANTIABLE; CREATE TYPE T_ALUNO UNDER T_PESSOA( MATRICULA INTEGER ) FINAL;
16 © CIn/UFPE 10/24/2021 Exercício 3 – Criação de Tabela, Inserção de Dados e Consulta CREATE TABLE ALU_TABLE OF T_ALUNO( MATRICULA PRIMARY KEY ); INSERT INTO ALU_TABLE VALUES(T_ALUNO('Maria Bonita', '21268430', to_date('20/01/1980', 'dd/mm/yyyy'), 45));
21 Métodos © CIn/UFPE 17 • Programas associados aos tipos que fazem computações e podem ter acesso aos atributos do tipo • Tipos de Métodos ▫ ▫ Member Method Static Method Constructor Method Comparison Methods
21 © CIn/UFPE 18 Member Method • Métodos que possuem acesso aos dados da instância do objeto • Self - representa a instância do tipo no qual o método é atualmente chamado • Na declaração de um tipo são definidas as assinaturas dos métodos • O corpo dos métodos deve ser criado em alguma linguagem de programação (PL/SQL, Java, C++)
21 Exemplo © CIn/UFPE 19 CREATE TYPE T_PESSOA AS OBJECT ( NOME VARCHAR 2(30), TELEFONE VARCHAR 2(20), MEMBER FUNCTION GET_NOME RETURN VARCHAR ); CREATE OR REPLACE TYPE BODY T_PESSOA AS MEMBER FUNCTION GET_NOME RETURN VARCHAR IS BEGIN RETURN SELF. NOME; END GET_NOME; END;
21 © CIn/UFPE 20 Static Method • Método de Classe • Trabalham com dados globais do tipo do objeto e não com a instância (não usam a palavra-chave SELF) • As chamadas são realizadas na forma TIPO. METODO()
21 © CIn/UFPE 10/24/2021 Exemplo CREATE TYPE T_PESSOA AS OBJECT( NOME VARCHAR 2(30), TELEFONE VARCHAR 2(20), DATA_NASCIMENTO DATE, . . . STATIC FUNCTION PESSOA_MAIS_VELHA RETURN T_PESSOA, . . . );
21 © CIn/UFPE 22 Constructor Method • Método que cria uma nova instância para o objeto, atribuindo valores aos seus atributos • Todo object type possui um método construtor, que é implícito e definido pelo sistema • O nome do método construtor é o mesmo do object type
23 © CIn/UFPE 10/24/2021 Exemplo CREATE TYPE Customer_typ AS OBJECT ( id NUMBER, name VARCHAR 2(20), phone VARCHAR 2(30) ); cust = Customer_typ(103, 'Ravi', '555 -1212')
21 © CIn/UFPE 24 Comparison Methods • Valores de tipos de dados primitivos como CHAR ou REAL possuem uma ordem predefinida, permitindo compará-los • Object type possui múltiplos atributos de diferentes tipos de dados, não possuindo um eixo definido de comparação ▫ Map method ▫ Order method
21 Map Method © CIn/UFPE 25 • Permite comparar objetos, mapeando as instâncias dos objetos em um dos tipos escalares DATE, NUMBER, VARCHAR 2 CREATE TYPE Retangulo_tipo AS OBJECT ( larg NUMBER, comp NUMBER, MAP MEMBER FUNCTION area RETURN NUMBER );
26 © CIn/UFPE 10/24/2021 Map Method CREATE TYPE BODY Retangulo_tipo AS MAP MEMBER FUNCTION area RETURN NUMBER IS BEGIN RETURN larg * comp; END area; END;
21 Order Method © CIn/UFPE 27 • Realiza comparações object-to-object • É função que possui um parâmetro declarado para outro objeto do mesmo tipo e retorna ▫ < 0, caso o objeto SELF seja menor que o objeto passado como argumento ▫ 0, caso sejam iguais ▫ > 0, caso o objeto SELF seja maior que o objeto passado como argumento • Um object type pode declarar apenas um Order Method
21 © CIn/UFPE 28 Coleções Multi-nível • Coleção que possui como elementos uma outra coleção de dados ▫ ▫ Tipo Nested Table de Nested Table Tipo Nested Table de Varray Tipo Varray de Nested Table. .
29 © CIn/UFPE 10/24/2021 Exercício 1 Turma Aluno 1 n Professor
21 © CIn/UFPE 30 Exercício 1 – Criação de Tipos • Definindo um tipo Nested Table de um tipo que possui um atributo nested table CREATE TYPE PROFESSOR_TYPE AS OBJECT ( NOME VARCHAR 2(15), DISCIPLINA VARCHAR 2(15) ); CREATE TYPE NT_PROF_T AS TABLE OF PROFESSOR_TYPE;
31 © CIn/UFPE 10/24/2021 Exercício 1 – Criação de Tipos CREATE TYPE ALUNO_TYPE AS OBJECT( MATRICULA NUMBER, PROFESSORES NT_PROF_T ); NESTED TABLE CREATE TYPE NT_ALUNO_T AS TABLE OF ALUNO_TYPE; CREATE TYPE TURMA_TYPE AS OBJECT ( CODIGO VARCHAR 2(3), SALA VARCHAR 2(3), ALUNOS NT_ALUNO_T );
32 © CIn/UFPE 10/24/2021 Exercício 1 – Criação de Tabelas CREATE TABLE TURMA_TAB OF TURMA_TYPE ( CODIGO PRIMARY KEY) NESTED TABLE ALUNOS STORE AS ALUNOS_T (NESTED TABLE PROFESSORES STORE AS PROF_T);
33 © CIn/UFPE 10/24/2021 Exercício 1 – Inserção de dados INSERT INTO TURMA_TAB VALUES ('I 5 A', 'S 9', NT_ALUNO_T( ALUNO_TYPE( 210141500, NT_PROF_T( PROFESSOR_TYPE('Fernando', 'GDI'), PROFESSOR_TYPE('Hermano', 'PD') ) ),
34 © CIn/UFPE 10/24/2021 Exercício 1 – Inserção de dados ALUNO_TYPE( 210141750, NT_PROF_T( PROFESSOR_TYPE('Silvio', 'HFC'), PROFESSOR_TYPE('Hermano', 'PLP') ) );
35 © CIn/UFPE 10/24/2021 Exercício 1 – Inserção de dados INSERT INTO TABLE( SELECT A. PROFESSORES FROM TABLE( SELECT T. ALUNOS FROM TURMA_TAB T WHERE T. CODIGO = 'I 5 A') A WHERE A. MATRICULA = 210141750) VALUES ('Ruy', 'IT');
36 © CIn/UFPE 10/24/2021 Exercício 1 – Atualização UPDATE TABLE( SELECT A. PROFESSORES FROM TABLE( SELECT T. ALUNOS FROM TURMA_TAB T WHERE T. CODIGO = 'I 5 A') A WHERE A. MATRICULA = 210141500) P SET VALUE(P)= PROFESSOR_TYPE('Jacques', 'PD') WHERE P. DISCIPLINA='PD';
37 © CIn/UFPE Exercício 1 – Consulta SELECT P. NOME, P. DISCIPLINA FROM TURMA_TAB T, TABLE(T. ALUNOS) A, TABLE(A. PROFESSORES) P; 10/24/2021
Referências • www. cin. ufpe. br/~if 685 • http: //disciplinas. lia. ufc. br/bdnc 061/ • http: //downloadeast. oracle. com/docs/cd/B 19306_01/appdev. 10 2/b 14260/adobjxmp. htm • R. Elmasri & S. Navathe – Sistemas de Banco de Dados, Addison Wesley, 2005, 4ª edição.
- Slides: 38