Cap­tulo 4: SGBDOR Oracle 11g Banco de Dados II Prof. Carlos Eduardo Pires cesp@dsc.ufcg.edu.br

  • View
    112

  • Download
    0

Embed Size (px)

Text of Cap­tulo 4: SGBDOR Oracle 11g Banco de Dados II Prof. Carlos Eduardo Pires cesp@dsc.ufcg.edu.br

  • Slide 1
  • Captulo 4: SGBDOR Oracle 11g Banco de Dados II Prof. Carlos Eduardo Pires cesp@dsc.ufcg.edu.br
  • Slide 2
  • Captulo 4: BDOR SGBD Oracle 11g2 SGBDOR Oracle 11g O SGBDOR ORACLE 11g oferece diferentes tipos de objetos: Tipos de Objetos (TADs) Nested Tables (Tabelas Aninhadas) Varying Arrays (Varrays) Large Objects (LOBs) References (REF) Object View (Viso de Objetos) No entanto, h algumas diferenas com o padro SQL:1999...
  • Slide 3
  • Captulo 4: BDOR SGBD Oracle 11g3 SGBDOR Oracle 11g Conceitos Bsicos Tipo de Objeto Mtodo Evoluo de Tipo (ALTER TYPE) Herana de Tipo Tabela de Objeto Objeto de Linha e Objeto de Coluna Referncia de Objeto Coleo de Objetos
  • Slide 4
  • Captulo 4: BDOR SGBD Oracle 11g4 Exemplo - UML Esquema Conceitual
  • Slide 5
  • Captulo 4: BDOR SGBD Oracle 11g5 Esquema Relacional Projeto BD Relacional
  • Slide 6
  • Captulo 4: BDOR SGBD Oracle 11g6 Esquema Objeto- Relacional
  • Slide 7
  • Captulo 4: BDOR SGBD Oracle 11g7 Definindo os Tipos 1 2 3 4 5 6 7
  • Slide 8
  • Captulo 4: BDOR SGBD Oracle 11g8 Tipos de Objetos (Object Types) Tipo de objeto um tipo abstrato de dados (TAD), ou seja, um Structured Type em SQL:1999 TAD um tipo de dado definido pelo usurio que encapsula propriedades (atributos) e comportamento (mtodos) Corresponde ao molde de um objeto No aloca espao de armazenamento No pode armazenar dados Por default, so definidos como FINAL (herana)
  • Slide 9
  • Captulo 4: BDOR SGBD Oracle 11g9 Um Tipo de Objeto um esquema de objeto com 3 componentes: Nome obrigatrio Atributos obrigatrio Mtodos facultativo (j vem com construtor) Um Tipo de Objeto pode ser usado para: Definir o domnio de campos (column object) de tabelas normais Definir o tipo dos atributos de TADs (embedded object) Criar uma tabela de objetos (object table) Tipos de Objetos (Object Types)
  • Slide 10
  • Captulo 4: BDOR SGBD Oracle 11g10 Tipos de Objetos (Object Types) Um tipo de objeto em Oracle possui a seguinte estrutura:
  • Slide 11
  • Captulo 4: BDOR SGBD Oracle 11g11 Tipos de Objetos (Object Types) Exemplo de especificao da interface pblica de um objeto Sintaxe resumida: CREATE [OR REPLACE] TYPE nome_tipo AS OBJECT ( [lista de atributos] [lista de mtodos] );
  • Slide 12
  • Captulo 4: BDOR SGBD Oracle 11g12 Tipos de Objetos (Object Types) Pode ser usado da mesma forma que usado um tipo primitivo -- Para definir o tipo de um atributo de uma tabela CREATE TABLE tb_contatos ( contato tp_pessoa, dt_contato DATE ); CREATE TABLE tb_domicilio ( local tp_ponto, endereco VARCHAR2 (80) ); -- Para definir o tipo de um atributo de um TAD CREATE TYPE tp_contatos AS OBJECT ( contato tp_ pessoa, dt_contato DATE ); CREATE TYPE tp_domicilio AS OBJECT ( local tp_ponto, endereco VARCHAR2 (80) );
  • Slide 13
  • Captulo 4: BDOR SGBD Oracle 11g13 CREATE TYPE ENDERECO_TYP AS OBJECT (rua VARCHAR2(50), cidade VARCHAR2(25), estado CHAR(2), cep NUMBER); CREATE TABLE PESSOAS (nome VARCHAR2(25), endereo ENDERECO_TYP); ENDEREO_TYP usado para definir o tipo (domnio) da coluna Endereo da tabela PESSOAS Tipos de Objetos
  • Slide 14
  • Captulo 4: BDOR SGBD Oracle 11g14 No possvel ocorrer uma insero de dados em PESSOA_TYP, porque um tipo de objeto apenas descreve dados, mas no os armazena CREATE TYPE ENDERECO_TYP AS OBJECT (rua VARCHAR2(50), cidade VARCHAR2(25), estado CHAR(2), cep NUMBER); CREATE TYPE PESSOA_TYP AS OBJECT (nome VARCHAR2(25), endereco ENDERECO_TYP); ENDEREO_TYP usado para definir o tipo do atributo Endereco do tipo PESSOA_TYP Tipos de Objetos
  • Slide 15
  • Captulo 4: BDOR SGBD Oracle 11g15 Para armazenar dados necessrio a criao de uma tabela a partir de um tipo de objeto. CREATE TYPE pessoa_ty AS OBJECT (Nome VARCHAR2(25), CPF NUMBER, Endereco ENDERECO_TY); CREATE TABLE pessoas OF pessoa_ty (CPF primary key); CREATE TABLE pessoas2 OF pessoa_ty; As tabelas de objetos PESSOAS e PESSOAS2 iro armazenar dados com a estrutura do tipo PESSOA_TY Tipos de Objetos
  • Slide 16
  • Captulo 4: BDOR SGBD Oracle 11g16 Exemplo com Mtodos CREATE TYPE person_typ AS OBJECT ( idno NUMBER, first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone VARCHAR2(20), MAP MEMBER FUNCTION get_idno RETURN NUMBER, MEMBER PROCEDURE display_details (SELF IN OUT person_typ)); Ateno: (SELF IN OUT person_type ) opcional!
  • Slide 17
  • Captulo 4: BDOR SGBD Oracle 11g17 Exemplo (cont.) CREATE TYPE BODY person_typ AS MAP MEMBER FUNCTION get_idno RETURN NUMBER IS BEGIN -- mtodo usado para comparao de objetos RETURN idno; END; MEMBER PROCEDURE display_details (SELF IN OUT person_typ) IS BEGIN -- use the PUT_LINE procedure of the DBMS_OUTPUT package to display details DBMS_OUTPUT.PUT_LINE(TO_CHAR(idno) || ' ' || first_name || ' ' || last_name); DBMS_OUTPUT.PUT_LINE(email || ' ' || phone); END;
  • Slide 18
  • Captulo 4: BDOR SGBD Oracle 11g18 Inserindo Dados Exemplo CREATE TABLE contacts ( contact person_typ, contact_date DATE ); INSERT INTO contacts VALUES ( person_typ (65, 'Verna', 'Mills', 'vmills@oracle.com', '1-800-555-4412'), '24-JUN-2003'); construtor
  • Slide 19
  • Captulo 4: BDOR SGBD Oracle 11g19 Inserindo com NULL INSERT INTO contacts VALUES (person_typ (NULL, NULL, NULL,NULL,NULL), '24 Jun 2003' ); INSERT INTO contacts VALUES (NULL, '25 Jun 2003' ); 1 2
  • Slide 20
  • Captulo 4: BDOR SGBD Oracle 11g20 Inserindo com NULL Em ambos os casos, o SGBD Oracle aloca espao em CONTACTS para uma nova linha e atualiza a coluna CONTACT_DATE de acordo com o valor fornecido Caso 1: SGBD Oracle aloca espao para um objeto na coluna CONTACT e atualiza cada atributo para NULL ((null, null, null, null, null),08-JAN-2009) Caso 2: SGBD Oracle atualiza o campo CONTACT para NULL e no aloca espao para um objeto na coluna CONTACT (null,08-JAN-2009)
  • Slide 21
  • Captulo 4: BDOR SGBD Oracle 11g21 Restries de Integridade (Constraints) So definidas na tabela normal ou de objetos CREATE TABLE department_mgrs ( dept_no NUMBER CONSTRAINT dept_no_pk PRIMARY KEY, dept_name CHAR(20), dept_mgr person_typ, dept_loc location_typ, CONSTRAINT dept_loc_cons1 UNIQUE (dept_loc.building_no, dept_loc.city), CONSTRAINT dept_loc_cons2 CHECK (dept_loc.city IS NOT NULL)); INSERT INTO department_mgrs VALUES (101, 'Physical Sciences', person_typ(65,'Vrinda Mills', '1-800-555-4412'), location_typ(300, 'Palo Alto')); nome da constraint dado pelo usurio construtores
  • Slide 22
  • Captulo 4: BDOR SGBD Oracle 11g22 Trigger em Objetos Tipados CREATE TABLE movement ( idno NUMBER, old_office location_typ, new_office location_typ); CREATE TRIGGER my_trigger BEFORE UPDATE OF office_loc ON office_tab FOR EACH ROW WHEN (new.office_loc.city = 'Redwood Shores') BEGIN IF :new.office_loc.building_no = 600 THEN INSERT INTO movement (idno, old_office, new_office) VALUES (:old.occupant.idno, :old.office_loc, :new.office_loc); END IF; END; colunatabela CREATE TABLE office_tab ( office_loc location_typ, occupant occupant_typ); CREATE TYPE location_typ AS OBJECT( city VARCHAR2(30), building_no NUMBER); CREATE TYPE occupant_typ AS OBJECT( idno NUMBER);
  • Slide 23
  • Captulo 4: BDOR SGBD Oracle 11g23 Mtodos So funes ou procedimentos declarados na definio de um tipo de objeto Exigem o uso de parnteses (mesmo sem parmetros) O uso de () para diferenciar o mtodo de um procedimento ou funo comum Podem ser: MEMBER ou STATIC MAP ou ORDER (para ordenao) Construtor Por default, os mtodos so definidos como NOT FINAL (permite que sejam sobrescritos)
  • Slide 24
  • Captulo 4: BDOR SGBD Oracle 11g24 Mtodos Um Object Type... sempre possui um mtodo construtor pode possuir zero ou mais mtodos membro pode possuir um mtodo map ou um mtodo order, porm no os dois Exemplo de chamada de mtodo sem parmetros SELECT c.get_idno() AS idno FROM contacts c;
  • Slide 25
  • Captulo 4: BDOR SGBD Oracle 11g25 Mtodos MEMBER So os mtodos mais comuns Implementam as operaes das instncias do tipo So chamados atravs da qualificao de objeto objeto.mtodo() SELF no precisa ser declarado, mas, se for, dever ser sempre o primeiro parmetro
  • Slide 26
  • Captulo 4: BDOR SGBD Oracle 11g26 Exemplo: Member Method CREATE TYPE solid_typ AS OBJECT ( len INTEGER, wth INTEGER, hgt INTEGER, MEMBER FUNCTION volume RETURN INTEGER, MEMBER FUNCTION surface RETURN INTEGER, MEMBER PROCEDURE display (SELF IN OUT solid_typ)); CREATE TYPE BODY solid_typ AS MEMBER FUNCTION volume RETURN INTEGER IS BEGIN RETURN len * wth * hgt; -- RETURN SELF.len * SELF.wth * SELF.hgt; -- equivalent to previous line END; MEMBER FUNCTION surface RETURN INTEGER IS BEGIN -- not necessary to include SELF prefix in following line RETURN 2 * (len * wth + len * hgt + wth * hgt); END; MEMBER PROCEDURE display (SELF IN OUT solid_typ) IS BEGIN DBMS_OUTPUT.PUT_LINE('Length: ' || len || ' - ' || 'Width: ' || wth || ' - ' || 'Height: ' || hgt); DBMS_OUTPUT.PUT_LINE('Volume: ' || volume || ' - ' || 'Surface area: ' || surface); END;
  • Slide 27
  • Captulo 4: BDOR SGBD Oracle 11g27 Mtodos Construtor Criado implicitamente ao criar um tipo de objeto Nome exatamente igual ao nome do tipo Pode haver mais de um construtor (overloadable) Exemplo INSERT INTO tb_contatos VALUES ( Person_typ (65, 'Pedro', 'Medeiros', 'pm@hotmail.com', '83-3337-3333'), SYSDATE);
  • Slide 28
  • Captulo