Oracle 9 i Aula Prtica ObjetoRelacional Monitoria GDI
Oracle 9 i Aula Prática Objeto-Relacional Monitoria GDI © CIn/UFPE
ORACLE 9 i - Object-Relational u. Tipo definido pelo usuário u. Tipos encapsulam uma estrutura de dados através de métodos necessários para sua manipulação u. Facilita o mapeamento de objetos Java em objetos do banco; u. Objetos persistentes e transientes 10/26/2021 © CIn/UFPE 2
ORACLE 9 i - Object-Relational u Elementos Objeto-Relacionais básicos: ðObject Types ðObject Tables Ø Row Objects e Column Objects ðColeções ðTipos de Dados REF ðObject Views ðHerança de Tipos ðMétodos 10/26/2021 © CIn/UFPE 3
ORACLE 9 i - Object Type Especificação Interface Pública Declaração de Atributos Especificação dos Métodos Corpo Implementação Privada 10/26/2021 Corpo dos Métodos © CIn/UFPE 4
ORACLE 9 i - Object Type u Definição de um object type não aloca espaço no banco. Sintaxe resumida: CREATE TYPE <NOME DO TIPO> AS OBJECT ( <LISTA DE ATRIBUTOS E MÉTODOS> ); 10/26/2021 © CIn/UFPE 5
ORACLE 9 i - Object Type Exemplo u. Definindo um tipo Endereço CREATE TYPE ENDERECO_TYPE AS OBJECT ( RUA VARCHAR 2(40), CIDADE VARCHAR 2(40), ESTADO VARCHAR 2(2) ); / 10/26/2021 © CIn/UFPE 6
ORACLE 9 i - Object Type Exemplo u. Definindo um tipo Pessoa CREATE TYPE PESSOA_TYPE AS OBJECT ( NOME VARCHAR 2(15), SOBRENOME VARCHAR 2(15), DT_NASC DATE, ); / 10/26/2021 © CIn/UFPE 7
ORACLE 9 i - Object Type Exemplo u Reutilização de um object-type em outros object types ou em tabelas(Column Objects) CREATE TYPE FUNCIONARIO_TYPE AS OBJECT ( MATRICULA NUMBER, DT_ADMISSAO DATE, PESSOA_TYPE, ENDERECO_TYPE, ); / 10/26/2021 © CIn/UFPE 8
ORACLE 9 i - Object Type Exemplo u Removendo o tipo funcionário DROP TYPE FUNCIONARIO_TYPE; / u Removendo o tipo funcionário que dependências de tabela com outros tipos possui DROP TYPE FUNCIONARIO_TYPE FORCE; / 10/26/2021 © CIn/UFPE 9
ORACLE 9 i - Object Table Sintaxe resumida: CREATE TABLE <NOME DA TABELA> OF <NOME DO TIPO> ( <LISTA DE PROPRIEDADES DOS ATRIBUTOS> ); 10/26/2021 © CIn/UFPE 10
ORACLE 9 i - Object Tables Definição CREATE TABLE FUNC OF FUNCIONARIO_TYPE ( MATRICULA PRIMARY KEY); u u Uso do OID(OBJECT IDENTIFIER) para identificar unicamente cada instância do object table. Este valor pode ser SYSTEM-GENERATED ou especificado pela chave primária da tabela. 10/26/2021 © CIn/UFPE 11
u. INSERT ORACLE 9 i - Object Tables DML INSERT INTO FUNC VALUES (1, to_date('03/11/1998', 'dd/mm/yyyy'), PESSOA_TYPE('Marcelo', 'Silva', to_date('20/05/1975', 'dd/mm/yyyy')), ENDERECO_TYPE('Av. Boa Viagem', 'Recife', 'PE')); 10/26/2021 © CIn/UFPE 12
ORACLE 9 i - Object Tables DML u. SELECT F. PESSOA. NOME, F. ENDERECO. RUA FROM FUNC F WHERE F. PESSOA. NOME = ‘Marcelo’; u. DELETE FROM FUNC WHERE MATRICULA = 1 10/26/2021 © CIn/UFPE 13
Exercício u. Implementar um relacionamento 1: N entre empregado e departamento Empregado n 1 Departamento u. Um empregado deve possuir matrícula, nome, endereço, e data de admissão u. Um departamento possui um código e uma descrição 10/26/2021 © CIn/UFPE 14
Exercício - Roteiro u. Crie os object types envolvidos u. Crie as object tables a partir dos tipos u. Insira dados nas tabelas u. Liste os empregados e o departamento a que pertencem 10/26/2021 © CIn/UFPE 15
ORACLE 9 i - Coleções São um meio de armazenar uma série de entradas de dados associadas a uma linha de um banco de dados u Modelam relacionamento 1 -para-muitos e atributos multivalorados u O Oracle 9 i oferece dois tipos de coleções ðVARRAYs ðNested Tables u 10/26/2021 © CIn/UFPE 16
ORACLE 9 i - VARRAY “Varring arrays” ðconjunto ordenado de elementos ðcada elemento possui um índice u Tipo de dado multivalorado u São, geralmente, armazenados junto com a linha (tupla) que os contém u Oferecem boa performance u O número máximo de elementos é limitado u 10/26/2021 © CIn/UFPE 17
ORACLE 9 i - VARRAY u Exemplo ðDefinindo um tipo VARRAY CREATE TYPE tel_array AS VARRAY(3) OF VARCHAR 2(15) 10/26/2021 © CIn/UFPE 18
ORACLE 9 i - VARRAY u Exemplo ðUtilizando o tipo VARRAY CREATE TYPE contato_tp AS OBJECT ( nome VARCHAR(40), telefones tel_array ) CREATE TABLE contato OF contato_tp 10/26/2021 © CIn/UFPE 19
ORACLE 9 i - VARRRAY u Exemplo ðInserindo dados no tipo VARRAY INSERT INTO contato VALUES ( ‘Fernando’, tel_array(‘ 81 34567080’, ‘ 81 96078898’, ‘ 81 33541123’) ) 10/26/2021 © CIn/UFPE 20
ORACLE 9 i - VARRAY u Exemplo ðConsultando dados do tipo VARRAY SELECT t. * FROM contato c, TABLE(c. telefones) t; 10/26/2021 © CIn/UFPE 21
Exercício u Crie um tipo objeto chamado Empregado, que possui como atributos: uma matrícula, um nome, um salário e uma lista limitada de dependentes (no máximo 10) Nome Dependentes Empregado Matrícula u u u Salário Cada dependente deverá possuir um nome e uma data de nascimento Liste todos os dependentes Liste os dependentes de um determinado empregado 10/26/2021 © CIn/UFPE 22
ORACLE 9 i - Nested Table É, essencialmente, uma tabela adicional u Podem ser manipuladas como tabelas normais ðSELECT, INSERT, DELETE, . . . u Não possuem um limite para o número de elementos u 10/26/2021 © CIn/UFPE 23
ORACLE 9 i - Nested Tables u Exemplo ðDefinindo um tipo Nested Table CREATE TYPE EMPREGADO_TYPE AS OBJECT( MATRICULA NUMBER, NOME VARCHAR 2(40) ); CREATE TYPE EMP_NESTED AS TABLE OF EMPREGADO_TYPE; 10/26/2021 © CIn/UFPE 24
ORACLE 9 i - Nested Tables u Exemplo ðUtilizando o tipo Nested Table CREATE TYPE DEPARTAMENTO_TYPE AS OBJECT( MATRICULA NUMBER, NOME VARCHAR 2(40), EMPREGADOS EMP_NESTED ); CREATE TABLE DEPARTAMENTO_TAB OF DEPARTAMENTO_TYPE NESTED TABLE EMPREGADOS STORE AS EMP_T; 10/26/2021 © CIn/UFPE 25
ORACLE 9 i - Nested Tables u Exemplo ðInserindo dados do tipo Nested Table INSERT INTO departamento_tab VALUES (1, 'Depto Compras', emp_nested( empregado_type(1, 'Marcelo') ) ) 10/26/2021 © CIn/UFPE 26
ORACLE 9 i - Nested Tables u Exemplo ðInserindo dados apenas no tipo Nested Table INSERT INTO THE(SELECT d. empregados FROM departamento_tab d WHERE d. nome = 'Depto Compras') VALUES (2, 'Joca') 10/26/2021 © CIn/UFPE 27
ORACLE 9 i - Nested Tables u Exemplo ðConsultando dados no tipo Nested Table SELECT * FROM THE(SELECT d. empregados FROM departamento_tab d WHERE d. nome = 'Depto Compras'); SELECT e. * FROM departamento_tab d, TABLE(d. empregados) e WHERE d. nome = 'Depto Compras‘; 10/26/2021 © CIn/UFPE 28
VARRAYS vrs Nested Tables u Quando utilizar VARRAYS ðNúmero pequeno e fixo de elementos ðElementos ordenados ðRecuperação e manipulação da coleção inteira 10/26/2021 © CIn/UFPE 29
VARRAYS vrs Nested Tables u Quando utilizar Nested Tables ðNúmero arbitrário de elementos ðConsultas a subconjuntos dos elementos ØSELECT ðOperações de ØINSERT, UPDATE e DELETE 10/26/2021 © CIn/UFPE 30
- Slides: 30