Características Objeto Relacionales en Oracle

Slides:



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

VISTAS (VIEWS) DEFINICIÓN Y OBJETIVO DE LAS VISTAS.
LENGUAJE ESTRUCTURADO DE CONSULTA “SQL”
BASE DE DATOS OBJETO RELACIONAL
1.2 Soporte a la Orientación a objeto
Implementación de funciones definidas por el usuario
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Fernando Velasco
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.
Maestría en Bioinformática Bases de Datos y Sistemas de Información Otros objetos de Base de Datos Ing. Alfonso Vicente, PMP
Lenguaje de consulta de Hibernate
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.
VISTAS EN INFORMIX Prof. Gabriel Matonte.
EL LENGUAJE ESTÁNDAR SQL
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Francisco Moreno Bases de Datos II Universidad Nacional
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
EXPLAIN PLAN Cómo leer los resultados del EXPLAIN PLAN
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
UNITA - IBARRA BLOQUES PL-SQL SUBPROGRAMAS Paulina Guevara.
Oracle, orientado a objetos
Unidad 3 Lenguaje SQL Contenidos Que es SQL ? Estructura de SQL
Lenguaje Estructurado de Consultas (Structured Query Language – SQL)
OPERACIONES DE RECUPERACIÓN. WHERE ciudad =‘Las Palmas’; de los suministradores Obtener el código y la situación de Las Palmas SELECT sn, situacion FROM.
4.3. Privilegios de usuarios
1 Procedimientos Es un conjunto de sentencias incluidas entre las declaraciones Sub o Function y End Sub/Function VB utiliza varios tipos de procedimientos:
PL/SQL Francisco Moreno Universidad Nacional.
Contenido de la sesión 1 Bases de Datos Relacionales Lenguaje SQL
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.
Bases de Datos Relacionales
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
PL/SQL Francisco Moreno Universidad Nacional.
PL/SQL Francisco Moreno Universidad Nacional.
Subconsultas Avanzadas
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.
PL/SQL Francisco Moreno Universidad Nacional.
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:
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
SQL (Structured Query Language / Lenguaje de consulta estructurado)‏
IBD CLASE 15. SQL Lenguaje de Consultas Estruturado (SQL) ◦Lenguaje de trabajo estándard para modelo relacional ◦Componentes ◦DDL: Data Definition Language.
Características Objeto Relacionales en Oracle
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
Estructura general de un programa en el servidor de Bases de Datos.
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
SQL Sigla del nombre “Structured Query Language”.
Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar un nombre a la vista y una sentencia SQL SELECT válida. CREATE.
Consultas SQL. SQL SQL es un lenguaje de consulta estructurado (Structured Query Languague). Se utiliza para: Eliminar Modificar Consultar La base de.
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.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
Unidad 6. Tema 4. Lenguaje de consultas SQL
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.
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.
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
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
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 a 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. Sea la tabla: CREATE TABLE aux(a NUMBER); INSERT INTO aux VALUES (8); INSERT INTO aux VALUES (7); SELECT matem_tip.factorial(a) FROM aux; 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, >, 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 Carece de 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 SELF.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', 'Dumbo', 30, 200); INSERT INTO emp VALUES('131', 'Lisa', 25, 80); INSERT INTO emp VALUES('141', 'Mary', 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 Mary 21 100 151 Paddy 21 100 121 Dumbo 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 siguiente 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', 'Dumbo', 30, 200) ¿Qué pasó con Mary y con Paddy?  Desaparición Ver otro ejemplo con un doc XML en el menú Varios

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 (SELF y el que llega como parámetro) y se establece si el objeto SELF es <, = o > al objeto parámetro (y se retorna un número negativo, cero o un número positivo, respectivamente) Cada objeto invocador SELF 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 (SELF.salario - a.salario); END ord_por_salario; END; / Crear de nuevo la tabla emp e insertarle datos Y de nuevo ensayar las dos consultas El objeto invocador 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', 'Dumbo', 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 NOT NULL ); 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, MEMBER FUNCTION total_det RETURN NUMBER); /

CREATE OR REPLACE TYPE BODY fac_type AS MEMBER FUNCTION total_det RETURN NUMBER IS total_uni NUMBER(5); BEGIN SELECT SUM(cant) INTO total_uni FROM detalle WHERE codfac = SELF.codigo; RETURN total_uni; END total_det; END; /

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 f.codigo, f.total_det() AS total FROM fobj f; SELECT d.codfac, d.pdto, d.fac_ref.fecha 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 originales