1 / 119

Unidade 4.1: BDOR – Oracle 11g

Unidade 4.1: BDOR – Oracle 11g. Banco de Dados II – 2009.2 Prof. Cláudio de Souza Baptista, Ph.D. UFCG/CEEI/DSC. Oracle OR 11g. O ORACLE 11g oferece diferentes tipos de objetos: Tipos de Objetos ( TADs ) Nested Tables (Tabelas aninhadas) VArrays ( Varying Arrays )

alodie
Download Presentation

Unidade 4.1: BDOR – Oracle 11g

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Unidade 4.1: BDOR – Oracle 11g Banco de Dados II – 2009.2 Prof. Cláudio de Souza Baptista, Ph.D. UFCG/CEEI/DSC

  2. Oracle OR 11g • O ORACLE 11g oferece diferentes tipos de objetos: • Tipos de Objetos (TADs) • NestedTables (Tabelas aninhadas) • VArrays (VaryingArrays) • LargeObjects (LOBs) • References (REF) • ObjectView (Visão de Objetos) • No entanto, háalgumasdiferenças com o padrã SQL:1999

  3. Oracle OR 11g • Conceitos Básicos • Tipo de Objeto • Método • Evolução de Tipo • Herança de Tipo • Tabela de Objeto • Objeto de Linha e Objeto de Coluna • Referência de Objeto • Coleção de Objetos

  4. Relacional.Objeto-relacional - Um banco de dados, tradicionalmente relacional, estendido para incluir os conceitos OO e estruturas como tipos de dados abstratos, nested tables e varying arrays.Orientado a objetos- Um banco de dados orientado a objetos cujo projeto é, desde o seu início, desenvolvido com análise orientada a objetos. Oracle OR 11g O ORACLE 11g fornece um suporte completo para todos os três diferentes tipos de implementação:

  5. Exemplo - UML

  6. Projeto BD Relacional Esquema Relacional

  7. Esquema Objeto Relacional

  8. Definindo os Tipos

  9. Tipos de Objetos (Object Types) • Tipo de objeto é um tipo abstrato de dados (TAD), ou seja um StructuredType em SQL:1999 • TAD é um tipo de dado definido pelo usuário que encapsula propriedades (atributos) e comportamento (métodos) • Corresponde ao “Molde” de um objeto • Não aloca espaço de armazenamento • Não pode armazenar dados

  10. Tipos de Objetos • Um Tipo de Objeto é um esquema de objeto com 3 componentes: • Nome • Atributos • Métodos • Um tipo de objeto pode ser usado para: • Definir o domínio de atributos (“column object”) de tabelas • Definir o tipo dos atributos de TADs ( “embedded object”) • Criar uma tabela de objetos

  11. Tipos de Objetos • Um tipo de objeto em Oracle possui a seguinte estrutura:

  12. Tipos de Objetos • Exemplo de especificação da interface pública de um objeto • Sintaxe resumida: CREATE [OR REPLACE] TYPE nome_tipo AS OBJECT ( [lista de atributos] [lista de métodos] );

  13. Tipos de Objetos Pode ser usado da mesma forma que é usado um tipo primitivo EX: Para definir o tipo de um atributo de uma tabela CREATE TABLE tb_contatos ( contato tp_pessoa, dt_contatoDATE ); CREATE TABLE tb_domicilio ( local tp_ponto, enderecoVARCHAR2 (80) ); -- Para definir o tipo de um atributo de um TAD CREATE TYPE tp_contatos AS OBJECT ( contato tp_ pessoa, dt_contatoDATE ); CREATE TYPE tp_domicilio AS OBJECT ( local tp_ponto, enderecoVARCHAR2 (80) );

  14. Tipos de objetos create type ENDERECO_TYP as object(rua VARCHAR2(50), cidade VARCHAR2(25), estado CHAR(2), cep NUMBER); create table PESSOAS (nome VARCHAR2(25), endereço ENDERECO_TYP); ENDEREÇO_TYP é usado para definir o tipo (domínio) da coluna Endereço da tabela PESSOAS

  15. Tipos de objetos create type ENDERECO_TYP as object(rua VARCHAR2(50), cidade VARCHAR2(25), estado CHAR(2), cep NUMBER); ENDEREÇO_TYP é usado para definir o tipo do atributo Endereco do tipo PESSOA_TYP create type PESSOA_TYP as object(nome VARCHAR2(25), endereco ENDERECO_TYP); Não é possível ocorrer uma inserção de dados em PESSOA_TYP. Isso porque um tipo de objeto descreve dados, mas não os armazena.

  16. Tipos de objetos Para armazenar dados é necessário a criação 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 ); A tabela PESSOAS irá armazenar dados com a estrutura do tipo PESSOA_TY

  17. Exemplo 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 NOCOPY person_typ ));

  18. Exemplo (cont.) CREATE TYPE BODY person_typ AS MAP MEMBER FUNCTION get_idno RETURN NUMBER IS BEGIN RETURN idno; END; MEMBER PROCEDURE display_details ( SELF IN OUT NOCOPY 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; END;

  19. Inserindo dados • Ex.: 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' );

  20. Inserindo com NULL CREATE TABLE contacts ( contact person_typ, contact_date DATE ); INSERT INTO contacts VALUES (person_typ (NULL, NULL, NULL), '24 Jun 2003' ); INSERT INTO contacts VALUES (NULL, '24 Jun 2003' );

  21. Constraints CREATE TABLE department_mgrs ( dept_no NUMBER PRIMARY KEY, dept_name CHAR(20), dept_mgrperson_typ, dept_loclocation_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, 'PhysicalSciences', person_typ(65,'Vrinda Mills', '1-800-555-4412'), location_typ(300, 'Palo Alto'));

  22. Trigger em Objetos Tipados CREATE TABLE movement ( idno NUMBER, old_officelocation_typ, new_officelocation_typ ); CREATE TRIGGER trigger1 BEFORE UPDATE OF office_loc ON office_tab FOR EACH ROW WHEN (new.office_loc.city = 'RedwoodShores') 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; OBS.: Não se podemodificarcolunas do tipo LOB no corpo de um trigger!

  23. Métodos • São funções ou procedimentos que são declarados na definição de um tipo de objeto • Exigem o uso de parênteses (mesmo sem parâmetros) • O uso de ( ) é para diferenciar o método de um procedimento ou função comum • Podem ser • MEMBER ou STATIC • MAP ou ORDER (para ordenação) • Construtor

  24. Métodos • Um object type sempre possui um construtor, pode possuir zero ou mais métodos membro e pode possuir um método map ou um método order, porém não os dois • Ex.: Chamada de método SELECT c.contact.get_idno() FROM contacts c;

  25. Métodos • MEMBER • São os métodos mais comuns • Implementam as operações das instâncias do tipo • São invocados através da qualificação de objeto objeto.método() • SELF não precisa ser declarado, mas pode ser e deverá ser sempre o primeiro parâmetro

  26. Ex. Member method CREATE TYPE solid_typ AS OBJECT ( len INTEGER, wth INTEGER, hgt INTEGER, MEMBER FUNCTION surface RETURN INTEGER, MEMBER FUNCTION volume RETURN INTEGER, MEMBER PROCEDURE display (SELF IN OUT NOCOPY 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 NOCOPY solid_typ) IS BEGIN DBMS_OUTPUT.PUT_LINE('Length: ' ||len || ' - ' || 'Width: ' ||wth || ' - ' || 'Height: ' ||hgt); DBMS_OUTPUT.PUT_LINE('Volume: ' || volume || ' - ' || 'Surface area: ‘ ||surface); END; END;

  27. Métodos • Construtor • Criado implicitamente ao criar um tipo de objeto • Deve ser exatamente igual ao nome do tipo • Pode haver mais de um construtor • EX: INSERT INTO tb_contatos VALUES ( Person_typ(65, ‘Pedro', ‘Medeiros', ‘pm@hotmail.com', '83-3337-3333'), ‘12 Mai 2005' );

  28. Static Method • São invocados nos tipos de dados, não nas instâncias • Usados para operações que são globais ao tipo e não precisam se reportar a uma instância particular • Não possui parâmetro SELF • Invocado da seguinte forma: type_name.method()

  29. Static Method - Exemplo CREATE TYPE atype AS OBJECT( a1 NUMBER, STATIC PROCEDURE newa ( p1 NUMBER, tabname VARCHAR2, schname VARCHAR2)); CREATE TYPE BODY atype AS STATIC PROCEDURE newa (p1 NUMBER, tabname VARCHAR2, schname VARCHAR2) IS sqlstmt VARCHAR2(100); BEGIN sqlstmt := 'INSERT INTO '||schname||'.'||tabname|| ' VALUES (atype(:1))'; EXECUTE IMMEDIATE sqlstmt USING p1; END; END; CREATE TABLE atab OF atype; BEGIN atype.newa(1, 'atab', 'HR'); END;

  30. Métodos para Comparação de Objetos MAP ou ORDER • São funções opcionais para comparar objetos • São mutuamente exclusivos! • Por default o ORACLE implementa a comparação STATE do SQL:1999 (queindica se um objeto é igualounão de outrobaseadonacomparação de cadaatributo) • ORDER • Implementa o RELATIVE WITH do SQL:1999, retornandonegativo, zero oupositivo • exige como parâmetro um obj. do mesmo tipo • ORDER compara o obj. corrente com o obj. do parâmetro • MAP • Implementa MAP do SQL:1999, retornando um valor de tipo built-in • não exige parâmetro • MAP compara vários objetos (ex: ORDER BY)

  31. Métodos para Comparação de Objetos Exemplo de MAP CREATE TYPE rectangle_typ AS OBJECT ( len NUMBER, wid NUMBER, MAP MEMBER FUNCTION area RETURN NUMBER); CREATE TYPE BODY rectangle_typ AS MAP MEMBER FUNCTION area RETURN NUMBER IS BEGIN RETURN len * wid; END area; END;

  32. Métodos para Comparação de Objetos Exemplo de ORDER CREATE TYPE location_typ AS OBJECT ( building_no NUMBER, city VARCHAR2(40), ORDER MEMBER FUNCTION match (l location_typ) RETURN INTEGER ); CREATE TYPE BODY location_typ AS ORDER MEMBER FUNCTION match (l location_typ) RETURN INTEGER IS BEGIN IF building_no < l.building_no THEN RETURN -1; -- qualquernúmeronegativo ELSIF building_no > l.building_no THEN RETURN 1; -- qualquernúmeropositivo ELSE RETURN 0; END IF; END; END;

  33. Evolução de Tipos • Uso do comandoALTER TYPE, permitemodificar, ouevoluir, um tipoobjeto: • Adicionar e remover atributos • Adicionar e remover métodos • Modificar um atributonuméricoparaaumentar o length, precision, ouscale • Modicar um atributo string paraaumentarseu length • Mudarpropriedades FINAL e INSTANTIABLE do tipo

  34. Evolução de Tipos • EX: ALTER TYPE person_typ ADD ATTRIBUTE ( sexVARCHAR2(1) ) CASCADE ; ALTER TYPE person_typ DROP MAP MEMBER FUNCTION get_id RETURN NUMBER; ALTER TYPE person_typNOT FINAL CASCADE; ALTER TYPE person_typ MODIFY ATTRIBUTE sexVARCHAR2(10) CASCADE ; • OBS.: • CASCADE: propaga a mudança para todos os tipos dependentes

  35. Herança de Tipos • Suportaherança simples • Háumadiferença do padrão SQL:1999, pois o Oracle nãorequerherançaexplicitamentenastabelas, masapenasnostipos => modelomais simples, emboramenosflexível • Permite criar uma hierarquia de sub-tipos especializados • Os tipos derivados (sub-tipos) herdam os atributos e métodos dos tipos ancestrais (super-tipos) • Os sub-tipos podem acrescentar novos atributos ou métodos e/ou redefinir os métodos dos super-tipos

  36. Herança de Tipos CREATE TYPE employee_typUNDER person_typ( depto_idNUMBER, funcaoVARCHAR2(30), salarioNUMBER ) NOT FINAL; • OBS.: Por default um tipo de objeto é FINAL!

  37. Herança de Tipos – Drop Type • Não se pode remover um subtipo antes de remover suasrespectivasinstânciasnatabelaquearmazena as tuplasdaquelesubtipo (substitutability) • Ex.: Drop Type incorreto DROP TYPE student_typ VALIDATE Corretoseria: DELETE FROM person_obj_table WHERE p IS OF (student_typ); DROP TYPE student_typ VALIDATE;

  38. Herança de Tipos CREATE TYPE person_typ AS OBJECT ( idno NUMBER, name VARCHAR2(30), phone VARCHAR2(20), FINAL MAP MEMBER FUNCTION get_idno RETURN NUMBER) NOT FINAL;

  39. Herança de Tipos CREATE TYPE professor_typ UNDER person_typ ( dept_id NUMBER, speciality VARCHAR2(30)) NOT FINAL;

  40. Overriding Method CREATE TYPE person_typ AS OBJECT ( idno NUMBER, name VARCHAR2(30), phone VARCHAR2(20), MAP MEMBER FUNCTION get_idno RETURN NUMBER, STATIC FUNCTION show_super (person_obj in person_typ) RETURN VARCHAR2, MEMBER FUNCTION show RETURN VARCHAR2) NOT FINAL;

  41. Overriding Method (cont.) CREATE TYPE BODY person_typ AS MAP MEMBER FUNCTION get_idno RETURN NUMBER IS BEGIN RETURN idno; END; -- static function that can be called by subtypes STATIC FUNCTION show_super (person_obj in person_typ) RETURN VARCHAR2 IS BEGIN RETURN 'Id: ' || TO_CHAR(person_obj.idno) || ', Name: ' || person_obj.name; END; -- function that can be overriden by subtypes MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN person_typ.show_super ( SELF ); END; END;

  42. Overriding Method (cont.) CREATE TYPE student_typ UNDER person_typ ( dept_id NUMBER, major VARCHAR2(30), OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2) NOT FINAL; CREATE TYPE BODY student_typ AS OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN person_typ.show_super ( SELF ) || ' -- Major: ' || major ; END; END;

  43. Overriding Method (cont.) CREATE TYPE employee_typ UNDER person_typ ( emp_id NUMBER, mgr VARCHAR2(30), OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2); CREATE TYPE BODY employee_typ AS OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN person_typ.show_super ( SELF ) || ' -- Employee Id: ' || TO_CHAR(emp_id) || ', Manager: ' || mgr ; END; END;

  44. Overriding Method (cont.) CREATE TYPE part_time_student_typ UNDER student_typ ( number_hours NUMBER, OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2); CREATE TYPE BODY part_time_student_typ AS OVERRIDING MEMBER FUNCTION show RETURN VARCHAR2 IS BEGIN RETURN person_typ.show_super ( SELF ) || ' -- Major: ' || major || ', Hours: ' || TO_CHAR(number_hours); END; END;

  45. Overriding Method (cont.) CREATE TABLE person_obj_table OF person_typ; INSERT INTO person_obj_table VALUES (person_typ(12, 'Bob Jones', '111-555-1212')); INSERT INTO person_obj_table VALUES (student_typ(51, 'Joe Lane', '1-800-555-1312', 12, 'HISTORY')); INSERT INTO person_obj_table VALUES (employee_typ(55, 'Jane Smith', '1-800-555-7765', 100, 'Jennifer Nelson')); INSERT INTO person_obj_table VALUES (part_time_student_typ(52, 'Kim Patel', '1-800-555-1232', 14, 'PHYSICS', 20));

  46. Overriding Method (cont.) SELECT p.show() FROM person_obj_table p; Resultado: Id: 12, Name: Bob Jones Id: 51, Name: Joe Lane -- Major: HISTORY Id: 55, Name: Jane Smith -- Employee Id: 100, Manager: Jennifer Nelson Id: 52, Name: Kim Patel -- Major: PHYSICS, Hours: 20

  47. Restrições em Overriding methods • Só se pode fazer overriding de métodos declarados NOT FINAL no supertipo • Métodos ORDER só podem ser definidos na raiz da hierarquia de tipos, não podendo ser overriden • Um método STATIC (MEMBER) num subtipo não poder override um método MEMBER (STATIC) do supertipo • Usando PL/SQL não se pode chamar o método do supertipo através da keyword super, mas pode-se invocar um método estático do supertipo

  48. Tabelas no ORACLE 11g • Oracle11g suporta 2 tipos de tabelas: • Tabela Relacional • Tabela de Objetos (Object Table) • uma tabela de objetos é um tipo especial de tabela que lida com objetos (“row objects”) e fornece uma visão relacional dos atributos desses objetos. • Princípio da Substituição (herança de tipos): uma coluna ou row definidas do tipo t podem conter instâncias de quaisquer de seus subtipos.

  49. Tabela de objetos vs. Tabela relacional • Uma tabela de objetos difere de uma tabela relacional em vários aspectos: • Cada linha de uma tabela de objetos possui um identificador de objeto (OID), definido pelo ORACLE quando a linha é inserida na tabela; • Um OID é um ponteiro para um objeto “linha” (ROW Object); • As linhas ( row objects) de uma tabela de objetos podem ser referenciadas por outros objetos do banco de dados.

  50. Tabela de objetos create type PESSOA_TY as object(Nome VARCHAR2(25), CPF NUMBER, Endereco ENDERECO_TY); create table PESSOAS of PESSOA_TY (CPF primary key ); • A tabela de objetos PESSOAS pode ser vista como: • Uma Tabela com uma única coluna: • - cada linha é um objeto do tipo PESSOA. • Uma Tabela com múltiplas colunas • - Uma coluna para cada atributo do tipo PESSOA_TY

More Related