Características Objeto Relacionales en Oracle

Slides:



Advertisements
Presentaciones similares
BASE DE DATOS OBJETO RELACIONAL
Advertisements

PL/SQL Francisco Moreno Universidad Nacional. Funciones Si un procedimiento tiene solo un parámetro de salida, se puede remplazar por una función y esta.
01/12/07Seminario de Bases de Datos1 Características Objeto Relacionales en Oracle 10G* * Tomado del curso de Francisco Moreno.
VISTAS EN INFORMIX Prof. Gabriel Matonte.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
UNITA - IBARRA BLOQUES PL-SQL SUBPROGRAMAS Paulina Guevara.
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
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.
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.
PL/SQL Francisco Moreno Universidad Nacional.
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:
Características Objeto Relacionales en Oracle
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
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.
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.
Expresiones algebraicas equivalentes
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
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.
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.
DLM Transact SQL Sesión II Recuperación de información.
Base de Datos I – Ing. Mary Carlota Bernal J.  Cada instrucción PL/SQL tiene asociado internamente un cursor  Los cursores en PL/SQL pueden ser de dos.
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.
COMANDOS SQL. ¿QUÉ ES SQL? El lenguaje de consulta estructurado es un lenguaje declarativo que permite la creación, acceso e interacción de bases de datos.
GESTOR DE BASE DE DATOS CARRERA: COMPUTACIÓN E INFORMÁTICA CURSO: TALLER DE SISTEMAS I DOCENTE: ING. JOSÉ EDUARDO QUISPE TAIPE CICLO: QUINTO.
Administración de Sistemas Gestores de Bases de Datos.
Conferencia 12. Temas Avanzados de Integridad de Bases de Datos.
Francisco Moreno Bases de Datos II Universidad Nacional
PL/SQL Francisco Moreno Universidad Nacional.
SQL: Structured Query Language
PL/SQL Francisco Moreno Universidad Nacional.
Curso Computación-Tecnología Médica
Características Objeto Relacionales en Oracle
MYSQL SQL: Lenguaje de consulta estructurado. Es un lenguaje de programación para trabajar con BD relacionadas, entre las cuales tenemos MYSQL, ORACLE,
Tipos de datos en MYSQL YEAR: Año. “YYYY” o “YY”
BASE DE DATOS IUPSM CLASE PRACTICA. PROF. ING. JOSE L GUZMAN H.
SQL: Structured Query Language
Stored Procedures Firebird.
Sesión IV Consultando múltiples tablas
Structure Query Languaje
SQL 2: Structured Query Language
SQL: structured Query Language
UN DISPARADOR O TRIGGER es un procedimiento que se ejecuta cuando se cumple una condición establecida al realizar una operación. Es una rutina autónoma.
5. SQL Procedural.
SQL Lenguaje de Consulta Estructurado
Taller de Bases de Datos Ingeniería en Sistemas Computacionales Clave de la asignatura: SCA-1025 (Créditos) SATCA1: 0 – 4 – 4.
FACTORY METHOD Creación a nivel de clases.
Sentencias DDL.
SQL Lenguaje de definición de datos
Oracle Pl/SQl Developer – Nivel 1
Lenguaje SQL Contenidos Que es SQL ? Estructura de SQL
Structure Query Languaje
15/08/2018Curso Bases de Datos1 DISEÑO DE BASES DE DATOS Francisco Moreno.
Unidad V :- Integridad de datos.
Capítulo 7 USO DE BASES DE DATOS OBJETO- RELACIONALES.
TRIGGERS VISTAS Y PROCESOS Ing. Fabiola Nilda Perez Oliver
Construcción de elementos de Software 4 MSc. Oscar Mauricio Salazar Ospina MSc Juan Camilo Jaramillo Alzate 15/05/2019Programación distribuida y paralela1.
Fundamentos de las Base de Datos. Contenido Que es una Base de Datos. La diferencia entre datos e informacion. Clasificacion de las base de datos. Importancia.
El SQL es el lenguaje estándar ANSI/ISO de definición, manipulación y control de bases de datos relacionales. La sigla que se conoce como SQL corresponde.
Transcripción de la presentación:

Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional

Métodos Estáticos Un método estático no referencia a los atributos del tipo Su comportamiento está determinado por sus parámetros o por otros elementos (distintos de los atributos del tipo) La invocación de un método estático se hace con el tipo NO con una instancia de dicho tipo

Métodos Estáticos CREATE OR REPLACE TYPE matem_tip AS OBJECT ( cod VARCHAR(8), STATIC FUNCTION factorial(n IN NUMBER) RETURN NUMBER); / CREATE OR REPLACE TYPE BODY matem_tip AS STATIC FUNCTION factorial(n IN NUMBER) RETURN NUMBER IS BEGIN IF n = 0 THEN RETURN 1; ELSE RETURN n * factorial(n-1); END IF; END factorial; END; /

Invocación Desde una consulta. SELECT matem_tip.factorial(5) FROM dual; Desde PL/SQL: BEGIN DBMS_OUTPUT.PUT_LINE(matem_tip.factorial(5)); END; / Nótese que es el tipo y no una instancia la que invoca al método estático

Métodos MAP y ORDER ¿Qué pasa si se comparan dos columnas tipadas (objetos) con un operador como >? Ej: empleado1 > empleado2 Este problema también se presenta en consultas que involucran objetos en una cláusula: ORDER BY objeto, GROUP BY objeto, DISTINCT objeto Para solucionar este problema se debe crear un método MAP u ORDER

Métodos MAP y ORDER Un tipo solo puede tener asociado uno de estos métodos Son métodos miembros, no estáticos MAP suele tener mejor desempeño (tiempo de ejecución) que ORDER pero puede ser menos flexible ¿En qué sentido?

Métodos MAP y ORDER No soportan parámetros adicionales a los preestablecidos  No se pueden sobrecargar Son invocados implícitamente por las operaciones que los requieren (ORDER, GROUP BY,DISTINCT, >, etc.) Se pueden invocar explícitamente Pueden generar confusión en una cláusula DISTINCT ya que “desaparecen” objetos que aparentemente son distintos  Ver ejemplos

Método MAP No tiene parámetros Es una función que debe retornar un valor correspondiente a un tipo primitivo del sistema (no puede retornar objetos creados por el usuario)

Ejemplo DROP TYPE emp_type FORCE; CREATE OR REPLACE TYPE emp_type AS OBJECT( cedula VARCHAR2(10), nombre VARCHAR2(10), edad NUMBER(2), salario NUMBER (6), MAP MEMBER FUNCTION ord_por_salario RETURN NUMBER ); / Tipo primitivo

Implementación CREATE OR REPLACE TYPE BODY emp_type AS MAP MEMBER FUNCTION ord_por_salario RETURN NUMBER IS BEGIN RETURN salario; END ord_por_salario; END; /

DROP TABLE emp; CREATE TABLE emp OF emp_type (cedula PRIMARY KEY, salario NOT NULL); INSERT INTO emp VALUES('111', 'Bobaldo', 20, 100); INSERT INTO emp VALUES('121', 'Dawn', 30, 200); INSERT INTO emp VALUES('131', 'Lisa', 25, 80); INSERT INTO emp VALUES('141', 'Sidhe', 21, 100); INSERT INTO emp VALUES('151', 'Paddy', 21, 100); INSERT INTO emp VALUES('171', 'Edneud', 18, 50);

Ahora ya es posible: SELECT * FROM emp e ORDER BY VALUE(e); CEDULA NOMBRE EDAD SALARIO ---------- ---------- ---------- ---------- 171 Edneud 18 50 131 Lisa 25 80 111 Bobaldo 20 100 141 Sidhe 21 100 151 Paddy 21 100 121 Dawn 30 200 Si hay empates en el valor retornado por la función MAP, el orden entre los empatados es aleatorio Empate (100)

SELECT DISTINCT VALUE(e) FROM emp e; Considérese la consulta: SELECT DISTINCT VALUE(e) FROM emp e; Resultado: VALUE(E)(CEDULA, NOMBRE, EDAD, SALARIO, COMISION) ------------------------------------------------------------------------------------ EMP_TYPE('171', 'Edneud', 18, 50) EMP_TYPE('131', 'Lisa', 25, 80) EMP_TYPE('111', 'Bobaldo', 20, 100) EMP_TYPE('121', 'Dawn', 30, 200) ¿Qué pasó con Sidhe y con Paddy?  Desaparición

Método ORDER Retorna un número (usualmente -1, 0, o 1) Recibe como parámetro un objeto del mismo tipo al cual se le está creando la función ORDER En el método ORDER se comparan dos objetos (el objeto invocador y el que llega como parámetro) y se establece si el objeto invocador es <, = o > al objeto parámetro (y se retorna un número negativo, el cero o un número positivo, respectivamente) Cada objeto invocador se compara sucesivamente con todos los objetos que llegan como parámetro

Ejemplo DROP TYPE emp_type FORCE; CREATE OR REPLACE TYPE emp_type AS OBJECT( cedula VARCHAR2(10), nombre VARCHAR2(10), edad NUMBER(2), salario NUMBER (6), ORDER MEMBER FUNCTION ord_por_salario(a IN emp_type) RETURN NUMBER ); /

Esta operación devolverá un número negativo, positivo o el cero CREATE OR REPLACE TYPE BODY emp_type AS ORDER MEMBER FUNCTION ord_por_salario(a IN emp_type) RETURN NUMBER IS BEGIN RETURN (salario - a.salario); END ord_por_salario; END; / Volver a crear la tabla emp, insertarle datos y ensayar las dos consultas… Esta operación devolverá un número negativo, positivo o el cero

SELECT VALUE(e), COUNT(*) AS cuantos FROM emp e GROUP BY VALUE(e); VALUE(e)(CEDULA, NOMBRE, EDAD, SALARIO) CUANTOS --------------------------------------- ------- EMP_TYPE('171', 'Edneud', 18, 50) 1 EMP_TYPE('131', 'Lisa', 25, 80) 1 EMP_TYPE('111', 'Bobaldo', 20, 100) 3 EMP_TYPE('121', 'Dawn', 30, 200) 1

Vistas objeto Considere el siguiente modelo E-R FACTURA compuesta de #código fecha compuesta de DETALLE #pdto *cant de

Implementación relacional: CREATE TABLE factura( codigo NUMBER(8) PRIMARY KEY, fecha DATE); CREATE TABLE detalle( pdto VARCHAR2(20), codfac NUMBER(8) REFERENCES factura, PRIMARY KEY(pdto, codfac), cant NUMBER(8) NOT NULL CHECK (cant > 0) );

INSERT INTO factura VALUES(1, SYSDATE); INSERT INTO detalle VALUES('Leche’, 1, 100); INSERT INTO detalle VALUES('Cerdo’, 1, 5); INSERT INTO detalle VALUES('Cerdo’, 2, 10); Convertir este modelo a objeto relacional sin migrar los datos  Crear una capa virtual  Vistas objeto

Procedimiento Crear los tipos para las vistas objeto deseadas: DROP TYPE fac_type FORCE; CREATE TYPE fac_type AS OBJECT( codigo NUMBER(8), fecha DATE); /

DROP TYPE det_type FORCE; CREATE TYPE det_type AS OBJECT( pdto VARCHAR2(20), codfac NUMBER(8), cant NUMBER(8), fac_ref REF fac_type ); /

Se crean las vistas objeto: CREATE OR REPLACE VIEW fobj OF fac_type WITH OBJECT OID(codigo) AS SELECT * FROM factura; Campo en la vista, se corresponde con el campo codigo de la tabla factura

CREATE OR REPLACE VIEW detobj OF det_type WITH OBJECT OID(pdto,codfac) AS SELECT pdto, codfac, cant, MAKE_REF(fobj, codfac) FROM detalle; Campos en la vista, se corresponden con (pdto y codfac) en la tabla detalle Para cada valor de codfac se obtiene un puntero desde la vista fobj

Sintaxis: MAKE_REF(view_name, value_list) Donde: view_name: Vista objeto de la cual se desea derivar el REF value_list: Lista de valores, separados por comas, los cuales se deben acoplar con los atributos que conforman el OID de la vista view_name.

Ya se puede trabajar con las vistas objetos como si fueran tablas objetuales: SELECT * FROM fobj; SELECT d.codfac, d.pdto, d.fac_ref.fecha fec FROM detobj d; INSERT INTO detobj(pdto, codfac, cant) VALUES('Gallina’, 2, 1000); Incluso se pueden insertar datos a través de la vista. Los datos quedan en las tablas base (originales):

Ejercicio Agregar métodos a los tipos fac_type y det_type y verificar que se pueden llamar desde las vistas objeto.