Características Objeto Relacionales en Oracle

Slides:



Advertisements
Presentaciones similares
SQL Sigla del nombre “Structured Query Language”.
Advertisements

Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título.
Insercion de datos..
Ejercicios Solemne 2 Parte 1
BASE DE DATOS OBJETO RELACIONAL
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Fernando Velasco
Presentación Asignatura POF030 Semana 1. Contenido En forma general, los conceptos que se estudiarán en la asignatura son: – Procedures – Functions –
Subprogramas: Procedimientos
01/12/07Seminario de Bases de Datos1 Características Objeto Relacionales en Oracle 10G* * Tomado del curso de Francisco Moreno.
01/12/07Seminario de Bases de Datos1 Características Objeto Relacionales en Oracle 10G* * Tomado del curso de Francisco Moreno.
Aplicación del paradigma orientado a objetos
Características Objeto Relacionales en Oracle
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Diseño y programación de
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
UNITA - IBARRA BLOQUES PL-SQL SUBPROGRAMAS Paulina Guevara.
Características Objeto Relacionales en Oracle
Lic. Rosemary Torrico Bascopé
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
PL/SQL Francisco Moreno Universidad Nacional. Introducción al PL/SQL ¿Por qué PL/SQL? A pesar de que SQL tiene mecanismos de control condicional (cláusula.
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Ing. Ricardo Carlos Inquilla Quispe
UNITA - IBARRA TRIGGERS
John Freddy Duitama M.U.de.A. Facultad de Ingeniería. Creación del esquema de Una Base de Datos. John Freddy Duitama Muñoz. Facultad de Ingeniería. U.de.A.
Laboratorio de Bases de datos
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 11 Creando Vistas.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
TRIGGERS EN ORACLE 8 J. Iriarte S. España
SQL: DDL Francisco Moreno & Carlos Mario Zapata. SQL:DDL DDL: Lenguaje de Definición de Datos Permite crear objetos en la Base de Datos Tipos de Objetos:
SQL (Structured Query Language / Lenguaje de consulta estructurado)‏
Triggers(Disparadores)
Bases de Datos 1 Prof. Daniel Obando Fuentes. USE USE {database}; Cambia el contexto de base de datos Es decir, dice cuál es la base de datos que se utilizará.
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
Structured Query Language (Lenguaje Estructurado de Consultas)
SQL: DDL Francisco Moreno. SQL: DDL DDL: Lenguaje de Definición de Datos Permite crear objetos en la BD Tipos de objetos: - Tablas: corresponden a las.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
Expresiones algebraicas equivalentes
SQL Sigla del nombre “Structured Query Language”.
Prof. De Bases de Datos: Lcdo. Luis Peña. El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL, Structured Query.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
SQL (Structured Query Language) Lenguaje orientado a bases de datos y sobre todo, al manejo de consultas; el objetivo principal de SQL es la realización.
PUESTO-TRABAJO (Código-Puesto, Empresa, Sueldo, DNI- Contratado) TITULADO (DNI-Titulado, Nombre, Apellidos, Dirección) TITULACION (Iden-Titulación, Nombre,
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
UNIVERSIDAD LATINA IV. CONSULTAS AVANZADAS CON BASES DE DATOS. E.I. L.E. Prof. Ramón Castro Liceaga.
Después de completar esta lección, debe ser capaz de:  Crear registro definidos por el usuario.  Crear un registro con el atributo %ROWTYPE.  Crear.
5 Paquetes ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Base de Datos I – Ing. Mary Carlota Bernal J. BASE DE DATOS I PL/SQL.
Apuntes PL-SQL Triggers II. Tipos de datos compuestos Registros PL/SQL: Son similares a un tipo struct en C o a un tipo Registro en otros 3GL. Se componen.
SQL: DDL.
6 Triggers ORACLE - II Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega.
INTEGRACION DE LAS TECNOLOGIAS DE LA INFORMACION Y COMUNICACION Implementación de base de datos (Lenguaje de manipulación de datos) Ing. Linda Masias Morales.
DML Transact SQL Sesión X Triggers. Duración 2 Horas.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Prof. Manuel B. Sánchez.  El origen del término polimorfismo es simple: proviene de las palabras griegas poly (muchos) y morphos (forma) multiforme.
Implementación de funciones definidas por el usuario.
6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.
6 Triggers ORACLE - III Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Características Objeto Relacionales en Oracle
BASE DE DATOS IUPSM CLASE PRACTICA. PROF. ING. JOSE L GUZMAN H.
Características Objeto Relacionales en Oracle
Capítulo 7 USO DE BASES DE DATOS OBJETO- RELACIONALES.
Transcripción de la presentación:

Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional

Oracle solo soporta herencia simple CLASE X atributos… métodos… CLASE K atributos… métodos… Supertipo CLASE Y atributos… métodos… CLASE Z atributos… métodos… Subtipos

Cada tipo especializado (subtipo) hereda todos los atributos y métodos del supertipo Los subtipos pueden añadir sus propios atributos* y métodos Los subtipos no pueden cambiar ni eliminar los atributos que heredan pero sí pueden redefinir los métodos que hereden y pueden agregar métodos sobrecargados Los cambios hechos al supertipo se reflejan en los subtipos * Con nombres distintos a los de su supertipo

Para que un tipo pueda tener subtipos se debe declarar NOT FINAL (la opción predeterminada es FINAL) Para que puedan existir objetos de un tipo, este debe ser INSTANTIABLE (es la opción predeterminada, es decir, no abstracto) Para hacerlo abstracto se debe declarar como NOT INSTANTIABLE: CREATE OR REPLACE TYPE persona_tipo AS OBJECT( cedula NUMBER(8), nombre VARCHAR2(10) ) NOT INSTANTIABLE NOT FINAL; /

Se puede cambiar un tipo a NOT FINAL así: ALTER TYPE nombre_tipo NOT FINAL; Se puede cambiar de NOT FINAL a FINAL siempre y cuando el tipo no posea subtipos en el momento del cambio Se puede cambiar de INSTANTIABLE a NOT INSTANTIABLE y viceversa. ¿Cuándo?

No es válido: CREATE OR REPLACE TYPE persona_tipo AS OBJECT( cedula NUMBER(8), nombre VARCHAR2(10) ) NOT INSTANTIABLE FINAL; /

FINAL: No puede ser redefinido por los hijos Un método puede ser: FINAL: No puede ser redefinido por los hijos NOT FINAL: Puede ser redefinido por los hijos* Y también puede ser: INSTANTIABLE: El tipo que declara el método lo implementa en su cuerpo* NOT INSTANTIABLE: El tipo que declara el método no lo implementa (delega la implementación a sus descendientes) * Es la opción predeterminada

Si un tipo posee un método no instanciable el tipo debe ser a su vez no instanciable ¿Por qué? CREATE OR REPLACE TYPE persona_tipo AS OBJECT( cedula NUMBER(8), nombre VARCHAR2(10), NOT INSTANTIABLE MEMBER FUNCTION descripcion RETURN VARCHAR ) INSTANTIABLE NOT FINAL; / Si un subtipo no implementa métodos no instanciables heredados, debe ser a su vez un tipo no instanciable Genera error

Ejemplo: Método redefinido PERSONA cédula nombre imprimir() Método sobrecargado EMPLEADO* código … ESTUDIANTE carné … PROFESOR registro imprimir() imprimir(NUMBER) DE PLANTA salario imprimir(VARCHAR) CATEDRÁTICO valor_hora imprimir(DATE) * No docente

Ejemplo DROP TYPE persona_type FORCE; CREATE TYPE persona_type AS OBJECT( cedula NUMBER(8), nombre VARCHAR2(10) ) NOT FINAL; / DROP TYPE profesor_type FORCE; CREATE TYPE profesor_type UNDER persona_type( registro NUMBER(5)

DROP TYPE profplanta_type FORCE; CREATE TYPE profplanta_type UNDER profesor_type( salario NUMBER(8) ) NOT FINAL; / DROP TYPE profcat_type FORCE; CREATE TYPE profcat_type UNDER val_hora NUMBER(8)

Principio de Sustitución: DROP TABLE persona; CREATE TABLE persona OF persona_type (cedula PRIMARY KEY); INSERT INTO persona VALUES(101,'Ana'); INSERT INTO persona VALUES(persona_type(201,'Luis'));

Principio de Sustitución: ¡Sorpresa!: INSERT INTO persona values(profesor_type(301,'Juan',550)); INSERT INTO persona values(profplanta_type(6,'Jim',950,10000)); INSERT INTO persona values(profcat_type(61,'Kim',52,10));

Principio de Sustitución: “Un objeto perteneciente a un supertipo puede ser remplazado por cualquiera de sus subtipos” Intuitivamente, en el ejemplo anterior: Todo profesor es una persona. Lo contrario no siempre se cumple: Una persona no necesariamente es profesor. Por eso a un objeto se le puede asignar un objeto subtipo, porque este es capaz de proveer todos los atributos que exige el supertipo. Este proceso también se denomina “widening” (ampliación)

No se ven los atributos exclusivos del profesor... SELECT * FROM persona; No se ven los atributos exclusivos del profesor... SELECT VALUE(p) FROM persona p; Se ven todos los datos. ¿Qué pasa si se desea imprimir solo la cédula y el registro de todos los profesores? No funcionan: SELECT cedula, registro FROM persona; SELECT VALUE(p).registro FROM persona p;

SELECT cedula,TREAT(VALUE(p) AS profesor_type).registro Para “descubrir” los atributos exclusivos de profesor se usa la función TREAT: SELECT cedula,TREAT(VALUE(p) AS profesor_type).registro FROM persona p; Ahora que pasa con: SELECT TREAT(VALUE(p) AS profesor_type) TREAT devuelve NULL si el objeto no se puede convertir al tipo indicado

TREAT no convierte un subtipo a supertipo: CREATE TABLE prof OF profesor_type (cedula PRIMARY KEY); INSERT INTO prof values(profesor_type(1,'Kim',50)); SELECT TREAT(VALUE(p) AS persona_type) FROM prof p; Lo deja como profesor_type

Operador IS OF: SELECT VALUE(p) FROM persona p WHERE VALUE(p) IS OF (profesor_type); Imprimirá solo los profesores (o subtipos de profesores…) Si se desean evitar los subtipos de profesor se puede usar el operador ONLY: WHERE VALUE(p) IS OF (ONLY profesor_type);

Redefinición de métodos. Ejemplo: DROP TYPE fig_typ FORCE; CREATE TYPE fig_typ AS OBJECT( nombre VARCHAR(10), FINAL MEMBER FUNCTION imp_nom RETURN VARCHAR, MEMBER FUNCTION descr RETURN VARCHAR )NOT FINAL; / No se puede redefinir Se puede redefinir

CREATE OR REPLACE TYPE BODY fig_typ AS FINAL MEMBER FUNCTION imp_nom RETURN VARCHAR IS BEGIN RETURN 'Mi nombre es ' ||nombre; END; MEMBER FUNCTION descr RETURN VARCHAR IS RETURN 'No sé que tipo de figura soy'; /

DROP TYPE cir_typ FORCE; CREATE TYPE cir_typ UNDER fig_typ( radio NUMBER(5), OVERRIDING MEMBER FUNCTION descr RETURN VARCHAR); /

CREATE OR REPLACE TYPE BODY cir_typ AS OVERRIDING MEMBER FUNCTION descr RETURN VARCHAR IS BEGIN RETURN 'Soy un círculo malo, mi radio es ' || TO_CHAR(radio) || ' y me voy a comer a las demás figuras'; END; /

DROP TABLE figura; CREATE TABLE figura OF fig_typ; INSERT INTO figura VALUES('Figura 1'); SELECT m.imp_nom(), m.descr() FROM figura m; DROP TABLE circulo; CREATE TABLE circulo OF cir_typ; INSERT INTO circulo VALUES('circulo 1',10); SELECT c.imp_nom(), c.descr() FROM circulo c; A partir de Oracle 11g, en PL/SQL, es posible invocar desde círculo el método descripción del tipo figura usando generalized invocation:

Ejemplo Generalized Invocation DECLARE c cir_typ; BEGIN SELECT VALUE(e) INTO c FROM circulo e; DBMS_OUTPUT.PUT_LINE(c.descr); DBMS_OUTPUT.PUT_LINE((c AS fig_typ).descr); END; /

O alternativamente, generar un objeto fig_typ en tiempo de ejecución: SELECT fig_typ(c.nombre).descr() FROM circulo c;

SELECT VALUE(p), SYS_TYPEID(VALUE(p)) FROM persona p; Función SYS_TYPEID Asigna un identificador a cada tipo dentro de la jerarquía de herencia: SELECT VALUE(p), SYS_TYPEID(VALUE(p)) FROM persona p;

Ejemplo con varray de punteros y herencia DROP TYPE emp_varray FORCE; CREATE OR REPLACE TYPE emp_varray AS VARRAY(5) OF REF persona_type; / DROP TABLE dep; CREATE TABLE dep( cod NUMBER(3) PRIMARY KEY, mis_emps emp_varray );

El puntero es tipado, lo siguiente genera error: INSERT INTO dep VALUES(1, emp_varray((SELECT REF(p) FROM persona p WHERE cedula = 6), (SELECT REF(p) FROM prof p WHERE cedula = 1))); El puntero es tipado, lo siguiente genera error: INSERT INTO dep VALUES(2, emp_varray((SELECT REF(f) FROM figura f WHERE nombre = 'Figura 1')));

Ejercicio Hacer un trigger que controle que en el varray todos los punteros sean del mismo tipo de objetos, por ejemplo, un varray solo de punteros a profesores Controlar que no haya punteros en NULL ni repetidos