Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouArtur Osório de Sequeira Alterado mais de 9 anos atrás
1
III – Oracle 9i Herança
2
Pessoa EmpregadoEstudante Est. Parcial Pessoa_tab
3
Criar um super tipo CREATE TYPE Person_typ AS OBJECT ( ssn NUMBER, name VARCHAR2(30), address VARCHAR2(100)) NOT FINAL Criar um sub tipo CREATE TYPE Student_typ UNDER Person_typ ( deptid NUMBER, major VARCHAR2(30)) NOT FINAL
4
Criar um sub tipo de um sub tipo CREATE TYPE PartTimeStudent_typ UNDER Student_typ ( numhours NUMBER) Final de um ramo de uma árvore CREATE TYPE Employee_typ UNDER Person_typ ( empid NUMBER, mgr VARCHAR2(30)) [FINAL]
5
Método FINAL –Não pode ser redefinido em um sub tipo CREATE TYPE T AS OBJECT (..., MEMBER PROCEDURE Print(), FINAL MEMBER FUNCTION foo(x NUMBER)...) NOT FINAL Tipo abstrato –Default: INSTANTIABLE Podemos criar instâncias ou não CREATE TYPE Address_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 Est-Parcial_tab –Outra alternativa: pessoas em Pessoa_tab, empregados em Empregado_tab, estudantes e estudantes parciais em Estudante_tab
7
Hierarquia de Tipos e “Object Tables” (2) CREATE TABLE Person_tab OF Person_typ ( … ) INSERT INTO TABLE Person_tab VALUES (student_typ ( … ) )
8
Consultas Função TREAT –SELECT TREAT(REF(p) AS REF Student_typ) FROM Person_tab p Retorna as referências para as pessoas-estudantes, e NULL para as pessoas que não são estudantes –SELECT p.name, TREAT(VALUE(p) AS Employee_typ).salary AS p.salary FROM Person_tab p Imprime os sal á rios das pessoas-empregados, e SALARIO IS NULL para as pessoas que não são empregados
9
Consultas (2) SELECT REF(p) FROM Person_tab P WHERE VALUE(p) IS OF (Employee_typ, Student_typ) –Retorna os REFs das pessoas-estudantes (estudantes- parciais) ou das pessoas-empregados –Não retorna REFs de pessoas, simplesmente SELECT REF(p) FROM Person_tab p WHERE VALUE(p) IS OF(ONLY Student_typ) –Excluindo objetos de subtipos Função IS OF
10
Consultas (3) SELECT REF(p) FROM Person_tab p SELECT DEREF(REF(p)) FROM Person_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 Oracle9i. CREATE TYPE Filme_objtyp / CREATE TYPE Estrela_objtyp /
12
Exercícios (2) CREATE TYPE RefFilme_objtyp AS OBJECT ( RefFilme REF Filme_objtyp ) / CREATE TYPE Estrelas_ntabtyp AS TABLE OF REF Estrela_objtyp / CREATE TYPE Filmes_ntabtyp AS TABLE OF REF Filme_objtyp /
13
Exercícios (3) CREATE TYPE Filme_objtyp AS OBJECT ( Titulo VARCHAR2(60), Ano INTEGER, Duracao NUMBER, Estrelado_por_ntab Estrelas_ntabtyp ) /
14
Exercícios (4) 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
Exercícios (5) 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
Exercícios (6) 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 dublado_por;...};
17
Exercícios (7) 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?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.