Upload
alexandre-moura
View
220
Download
3
Embed Size (px)
Citation preview
Conceitos de SGBD Objeto-Relacional
Oracle 10g [2]Monitoria GDI
André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina
Aula e Script
www/~dsrm/gdi
Caso de estudo
3
Roteiro▫INSERTS e SELECT▫Outros Operadores importantes▫Herança e Funções▫Coleções de coleções
Exercício1. Realizar INSERT em todas as tabelas
1. Cliente_tab2. ItemEstoque_tab3. Pedido_tab
2. Realizar SELECTs1. Ver script!
© CIn/UFPE6
04/27/23
Predicados úteis com objetos•VALUE•REF•DREF
© CIn/UFPE7
04/27/23
Operador VALUE•VALUE - Retorna instância da object table
ou object viewselect value(c) from cliente_tab c where c.idcliente = 1;
© CIn/UFPE8
04/27/23
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.idEstoque = 1004;
© CIn/UFPE9
04/27/23
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.entregarNoEndereco_obj, p.idPedido, item_ntab FROM Pedido_tab p WHERE p.idPedido = 1001 ;
© CIn/UFPE
10
04/27/23
Herança•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
© CIn/UFPE11
04/27/23
Herança
•Tipos de objetos abstratosCREATE 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;
© CIn/UFPE12
04/27/23
Herança•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;
© CIn/UFPE13
04/27/23
Herança•Criando Subtipos
CREATE TYPE <SUB-TIPO> UNDER <TIPO>( <definição de atributos>
);
© CIn/UFPE14
04/27/23
Exemplo•Dada a situação
Pessoa
Aluno
Definir tipos usando herança
© CIn/UFPE
15
04/27/23
Exercício 3 – Criação de TiposCREATE TYPE T_PESSOA AS OBJECT(
NOME VARCHAR2(30),TELEFONE VARCHAR2(20),DATA_NASCIMENTO DATE
) NOT FINAL NOT INSTANTIABLE;
CREATE TYPE T_ALUNO UNDER T_PESSOA(MATRICULA INTEGER
) FINAL;
© CIn/UFPE
16
04/27/23
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));
© CIn/UFPE17
04/27/23
Métodos•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
© CIn/UFPE18
04/27/23
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++)
© CIn/UFPE19
04/27/23
ExemploCREATE TYPE T_PESSOA AS OBJECT (NOME VARCHAR2(30),TELEFONE VARCHAR2(20),MEMBER FUNCTION GET_NOME RETURN VARCHAR);
CREATE OR REPLACE TYPE BODY T_PESSOA ASMEMBER FUNCTION GET_NOME RETURN VARCHAR ISBEGINRETURN SELF.NOME;END GET_NOME;END;
© CIn/UFPE20
04/27/23
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()
© CIn/UFPE
21
04/27/23
ExemploCREATE TYPE T_PESSOA AS OBJECT(NOME VARCHAR2(30),TELEFONE VARCHAR2(20),DATA_NASCIMENTO DATE,...STATIC FUNCTION PESSOA_MAIS_VELHA RETURN T_PESSOA,...);
© CIn/UFPE22
04/27/23
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
© CIn/UFPE
23
04/27/23
ExemploCREATE TYPE Customer_typ AS OBJECT (
id NUMBER,name VARCHAR2(20),phone VARCHAR2(30) );
cust = Customer_typ(103, 'Ravi', '555-1212')
© CIn/UFPE24
04/27/23
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
© CIn/UFPE25
04/27/23
Map Method
•Permite comparar objetos, mapeando as instâncias dos objetos em um dos tipos escalares DATE, NUMBER, VARCHAR2
CREATE TYPE Retangulo_tipo AS OBJECT (larg NUMBER,comp NUMBER,
MAP MEMBER FUNCTION area RETURN NUMBER);
© CIn/UFPE
26
04/27/23
Map MethodCREATE TYPE BODY Retangulo_tipo ASMAP MEMBER FUNCTION area RETURN NUMBER IS
BEGIN RETURN larg * comp;END area;
END;
© CIn/UFPE27
04/27/23
Order Method•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
© CIn/UFPE28
04/27/23
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▫....
© CIn/UFPE
29
04/27/23
Exercício 1Turma Aluno
Professor
1 n
1
n
© CIn/UFPE30
04/27/23
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 VARCHAR2(15), DISCIPLINA VARCHAR2(15));
CREATE TYPE NT_PROF_T AS TABLE OF PROFESSOR_TYPE;
© CIn/UFPE
31
04/27/23
Exercício 1 – Criação de TiposCREATE 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);
NESTED TABLE
© CIn/UFPE
32
04/27/23
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);
© CIn/UFPE
33
04/27/23
Exercício 1 – Inserção de dadosINSERT INTO TURMA_TAB VALUES ('I5A', 'S9', NT_ALUNO_T( ALUNO_TYPE( 210141500, NT_PROF_T( PROFESSOR_TYPE('Fernando','GDI'), PROFESSOR_TYPE('Hermano','PD') ) ),
© CIn/UFPE
34
04/27/23
Exercício 1 – Inserção de dadosALUNO_TYPE( 210141750, NT_PROF_T( PROFESSOR_TYPE('Silvio','HFC'), PROFESSOR_TYPE('Hermano','PLP') ) ) ) );
© CIn/UFPE
35
04/27/23
Exercício 1 – Inserção de dadosINSERT INTO TABLE( SELECT A.PROFESSORESFROM TABLE( SELECT T.ALUNOSFROM TURMA_TAB TWHERE T.CODIGO = 'I5A') AWHERE A.MATRICULA = 210141750)VALUES ('Ruy','IT');
© CIn/UFPE
36
04/27/23
Exercício 1 – AtualizaçãoUPDATE TABLE( SELECT A.PROFESSORESFROM TABLE( SELECT T.ALUNOSFROM TURMA_TAB TWHERE T.CODIGO = 'I5A') AWHERE A.MATRICULA = 210141500) PSET VALUE(P)= PROFESSOR_TYPE('Jacques','PD')WHERE P.DISCIPLINA='PD';
© CIn/UFPE
37
04/27/23
Exercício 1 – ConsultaSELECT P.NOME, P.DISCIPLINAFROM TURMA_TAB T, TABLE(T.ALUNOS) A, TABLE(A.PROFESSORES) P;
Referências•www.cin.ufpe.br/~if685•http://disciplinas.lia.ufc.br/bdnc061/•http://download-east.oracle.com/docs/cd/B
19306_01/appdev.102/b14260/adobjxmp.htm
•R. Elmasri & S. Navathe – Sistemas de Banco de Dados, Addison Wesley, 2005, 4ª edição.