A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

III – Oracle 10g Herança.

Apresentações semelhantes


Apresentação em tema: "III – Oracle 10g Herança."— Transcrição da apresentação:

1 III – Oracle 10g Herança

2 Pessoa Pessoa_tab Empregado Estudante Est. Parcial

3 Criar um super tipo CREATE TYPE Pessoa_typ AS OBJECT ( rg NUMBER, nome VARCHAR2(30), endereço VARCHAR2(100)) NOT FINAL Criar um sub tipo CREATE TYPE Estudante_typ UNDER Pessoa_typ ( id_departamento NUMBER, formação VARCHAR2(30))

4 Criar um sub tipo de um sub tipo
CREATE TYPE estudante_parcial_typ UNDER Estudante_typ ( num_horas NUMBER) Final de um ramo de uma árvore CREATE TYPE Empregado_typ UNDER Pessoa_typ ( id_empregado NUMBER, gerente VARCHAR2(30)) [FINAL]

5 Método FINAL Não pode ser redefinido em um sub tipo
CREATE TYPE T AS OBJECT (..., MEMBER PROCEDURE Imprimir(), FINAL MEMBER FUNCTION area(x NUMBER)...) NOT FINAL Tipo abstrato Default: INSTANTIABLE Podemos criar instâncias ou não CREATE TYPE Endereço_typ AS OBJECT (...) NOT INSTANTIABLE NOT FINAL

6 Hierarquia de Tipos e “Object Tables”
Como estudante (estudante parcial) (empregado) é uma pessoa Estudantes, estudantes parciais e empregados podem ser criados em Pessoa_tab Pessoas em Pessoa_tab, empregados em Empregado_tab, estudantes em Estudante_tab, estudantes parciais em Estudante_Parcial_tab Outra alternativa: pessoas em Pessoa_tab, empregados em Empregado_tab, estudantes e estudantes parciais em Estudante_tab Ou a alternativa ‘normal’: somente os tipos das folhas da hierarquia são instanciáveis

7 CREATE TABLE Pessoa_tab OF Pessoa_typ
( … ) INSERT INTO TABLE Pessoa_tab VALUES (Estudante_typ ( … ) )

8 Consultas Função TREAT SELECT p.nome, TREAT(VALUE(p) AS
Empregado_typ).salario AS p.salario FROM Pessoa_tab p Imprime os salários das pessoas-empregados, e SALARIO IS NULL para as pessoas que não são empregados

9 Função IS OF SELECT VALUE(p) FROM Pessoa_tab P WHERE VALUE(p) IS OF
(Empregado_typ, Estudante_typ) Retorna os estados dos objetos pessoa-estudante, pessoa-estudante-parcial, pessoa-empregado Não retorna estados de objetos exclusivamente pessoa FROM Pessoa_tab p WHERE VALUE(p) IS OF(ONLY Estudante_typ) Só objetos estudante, excluindo estudante-parcial

10 SELECT DEREF(REF(p)) FROM Pessoa_tab p
Os resultados de REF e DEREF podem incluir objetos do tipo pessoa e objetos dos subtipos empregado, estudante e estudante parcial

11 Exercícios BD Filmes, da sala de aula, e sua implementação Oracle 10g
CREATE TYPE Filme_objtyp / CREATE TYPE Estrela_objtyp CREATE TYPE RefFilme_objtyp AS OBJECT ( RefFilme REF Filme_objtyp) CREATE TYPE RefEstrela_objtyp AS OBJECT ( RefEstrela REF Estrela_objtyp)

12 CREATE TYPE Estrelas_ntabtyp AS TABLE OF RefEstrela_objtyp
/ CREATE TYPE Filmes_ntabtyp AS TABLE OF RefFilme_objtyp

13 CREATE TYPE Filme_objtyp AS OBJECT (
Titulo VARCHAR2(60), Ano INTEGER, Duracao NUMBER, Estrelado_por_ntab Estrelas_ntabtyp ) /

14 CREATE TYPE Estrela_objtyp AS OBJECT (
Nome VARCHAR2(60), Estrelou_em_ntab Filmes_ntabtyp, MEMBER FUNCTION Numero_filmes RETURN INTEGER, PRAGMA RESTRICT_REFERENCES (Numero_filmes, RNDS, RNPS, WNDS, WNPS) ) /

15 CREATE OR REPLACE TYPE BODY Estrela_objtyp AS
MEMBER FUNCTION Numero_filmes RETURN INTEGER IS BEGIN RETURN SELF.Estrelou_em_ntab.COUNT; END; / CREATE TABLE Filme_objtab OF Filme_objtyp NESTED TABLE Estrelado_por_ntab STORE AS Estrelas

16 CREATE TABLE Estrela_objtab OF Estrela_objtyp
NESTED TABLE Estrelou_em_ntab STORE AS Filmes / a) Estender o “script” para implementar a classe class Des_Animado extends Filme { (extent Desenhos) relationship Set<Estrela> dublado_por; ...}; 

17 b) Povoar a “object table” Desenho_objtab, e em seguida as “nested tables” respectivas
c) Inserir tudo em um único comando INSERT d) Quais os filmes dublados por Marília Pêra?


Carregar ppt "III – Oracle 10g Herança."

Apresentações semelhantes


Anúncios Google