conceitos de sgbd objeto-relacional oracle 10g [2] monitoria gdi andré braga, daniel penaforte,...

38
Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

Upload: alexandre-moura

Post on 07-Apr-2016

218 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

Conceitos de SGBD Objeto-Relacional

Oracle 10g [2]Monitoria GDI

André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

Page 2: 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

Page 3: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

Caso de estudo

3

Page 4: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

Roteiro▫INSERTS e SELECT▫Outros Operadores importantes▫Herança e Funções▫Coleções de coleções

Page 5: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

Exercício1. Realizar INSERT em todas as tabelas

1. Cliente_tab2. ItemEstoque_tab3. Pedido_tab

2. Realizar SELECTs1. Ver script!

Page 6: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© CIn/UFPE6

04/27/23

Predicados úteis com objetos•VALUE•REF•DREF

Page 7: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 8: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 9: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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 ;

Page 10: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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

Page 11: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 12: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 13: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© CIn/UFPE13

04/27/23

Herança•Criando Subtipos

CREATE TYPE <SUB-TIPO> UNDER <TIPO>( <definição de atributos>

);

Page 14: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© CIn/UFPE14

04/27/23

Exemplo•Dada a situação

Pessoa

Aluno

Definir tipos usando herança

Page 15: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 16: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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));

Page 17: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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

Page 18: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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++)

Page 19: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 20: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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()

Page 21: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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,...);

Page 22: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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

Page 23: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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')

Page 24: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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

Page 25: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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);

Page 26: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 27: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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

Page 28: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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▫....

Page 29: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© CIn/UFPE

29

04/27/23

Exercício 1Turma Aluno

Professor

1 n

1

n

Page 30: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 31: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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

Page 32: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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);

Page 33: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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') ) ),

Page 34: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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') ) ) ) );

Page 35: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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');

Page 36: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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';

Page 37: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

© 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;

Page 38: Conceitos de SGBD Objeto-Relacional Oracle 10g [2] Monitoria GDI André Braga, Daniel Penaforte, Domingos Ribeiro, João Pascoal, Maria Carolina

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.