Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.

Slides:



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

VISTAS (VIEWS) DEFINICIÓN Y OBJETIVO DE LAS VISTAS.
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..
LENGUAJE ESTRUCTURADO DE CONSULTA “SQL”
BASE DE DATOS OBJETO RELACIONAL
Implementación de funciones definidas por el usuario
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Fernando Velasco
Unidad 3 Lenguaje de manipulación de datos(DML).
Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: DML Ing. Alfonso Vicente, PMP
Maestría en Bioinformática Bases de Datos y Sistemas de Información Otros objetos de Base de Datos Ing. Alfonso Vicente, PMP
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.
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.
UNITA - IBARRA BLOQUES PL-SQL SUBPROGRAMAS Paulina Guevara.
Características Objeto Relacionales en Oracle
Unidad 3 Lenguaje SQL Contenidos Que es SQL ? Estructura de SQL
Lenguaje Estructurado de Consultas (Structured Query Language – SQL)
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
MySQL M.C. Pedro Bello López.
SQL Lenguaje de consulta estructurado
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.
Dr. Mario Rossainz López Aplicaciones WEB Primavera 2015.
Laboratorio de Bases de datos
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)‏
Características Objeto Relacionales en Oracle
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
Structured Query Language (Lenguaje Estructurado de Consultas)
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
Cifrar / Descifrar campos en SQL
SQL Sigla del nombre “Structured Query Language”.
Base de Datos I. SQL es el lenguaje estándar para trabaja con base de datos relacionales. MySQL, el sistema de gestión de bases de datos SQL Open Source.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
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.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
(Lenguaje de consulta estructurado)
UNIVERSIDAD LATINA IV. CONSULTAS AVANZADAS CON BASES DE DATOS. E.I. L.E. Prof. Ramón Castro Liceaga.
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.
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.
Mtr. Adrián Monge Monge Educación 2015 Maestría, Mención en Administración de Proyectos ULACITMaestría, Mención en Administración de Proyectos 2012 Licenciatura,
DML Transact SQL Sesión X Triggers. Duración 2 Horas.
Implementación de funciones definidas por el usuario.
Crear una tabla (create table - sp_tables - sp_columns - drop table) Para ver las tablas existentes creadas por los usuarios en una base de datos usamos.
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 Son de dos tipos: Procedimientos Funciones - Los procedimientos y funciones se pueden invocar desde otros procedimientos o desde otras funciones. - Las funciones también se pueden invocar desde operaciones DML (pero los procedimientos no).

idlibro título cantidad precio_base imp_base género género LIBRO impuesto() descuento(tiquete) Atributos Métodos Sea

Ejemplo: Para determinar el precio final de un libro se considera un impuesto y un descuento. El impuesto se obtiene del precio base del libro así: (imp_base + 5%) si hay menos de 100 unidades del libro (imp_base + 10%) si hay más de 99 unidades del libro

El descuento se obtiene del precio base del libro a partir de un tiquete que el cliente puede presentar, así: Tiquete tipo 1 descuento del 5% Tiquete tipo 2 descuento del 7.5% Tiquete tipo 3 descuento del 10% Sin tiquete descuento del 0% Estos datos se guardan en una tabla así:

DROP TABLE dtiq; CREATE TABLE dtiq( cod NUMBER(1) PRIMARY KEY, val NUMBER(3,1) NOT NULL ); INSERT INTO dtiq VALUES(1, 5); INSERT INTO dtiq VALUES(2, 7.5); INSERT INTO dtiq VALUES(3, 10);

CREATE OR REPLACE TYPE libro_tip AS OBJECT( --Atributos idlibro idlibro NUMBER(5), titulo titulo VARCHAR2(30), cantidad cantidad NUMBER(4), precio_base precio_base NUMBER(6), imp_base imp_base NUMBER(3), genero genero VARCHAR2(20), --Métodos: MEMBER FUNCTION impuesto RETURN NUMBER, descuento MEMBER FUNCTION descuento (tiquete IN NUMBER) RETURN NUMBER ); / Notas: Los nombres de los métodos deben ser diferentes a los nombres de los atributos. Se permite sobrecarga de métodos y constructores de usuario, se ven más adelante

BODY CREATE OR REPLACE TYPE BODY libro_tip AS MEMBER FUNCTION impuesto RETURN NUMBER IS BEGIN IF cantidad < 100 THEN RETURN ((5 + imp_base) * precio_base)/100; ELSE RETURN ((10 + imp_base) * precio_base)/100; END IF; END impuesto ; Nota: El body continúa en la próxima diapositiva

descuento MEMBER FUNCTION descuento (tiquete IN NUMBER) RETURN NUMBER IS d NUMBER(7,1); BEGIN SELECT (precio_base * val) / 100 INTO d FROM dtiq WHERE cod = tiquete; RETURN d; EXCEPTION WHEN OTHERS THEN RETURN 0; descuento END descuento; END; --Fin del BODY / Parámetro Atributo del objeto Columna de dtiq

Tabla tipada de libros: CREATE TABLE libro OF libro_tip(idlibro PRIMARY KEY); INSERT INTO libro VALUES(523,'Azul',25,10000,10,'Poesía'); INSERT INTO libro VALUES(655,'Versos',70,15000,10,'Poesía'); INSERT INTO libro VALUES(625,'Dragón',700,5000,8,'Novela'); Al insertar en una tabla tipada no es necesario, pero es válido, invocar al constructor explícitamente : INSERT INTO libro VALUES libro_tip (libro_tip(785,'Billy el Mico',200,5000,5,'Novela')); INSERT INTO libro VALUES libro_tip (libro_tip(795,'Beauty Disrupted',100,50000,5,'Biografía'));

Ahora ya se pueden formular consultas como: Imprimir el código de cada libro, su precio base, su impuesto y su descuento con tiquete 1: SELECT idlibro, titulo, precio_base, l.descuento(1) AS descuento, l.impuesto() AS impuesto FROM libro l;

¿Qué hacen las siguientes consultas? a) SELECT idlibro, titulo, precio_base, (l.precio_base - l.descuento(1) + l.impuesto()) AS precio_final FROM libro l;

b) SELECT idlibro, titulo FROM libro l WHERE (l.precio_base - l.descuento(2) + l.impuesto()) <= 10000;

c) SELECT genero, COUNT(*) AS cuantos, SUM(precio_base) AS total_basico, SUM(precio_base - l.descuento(0) + l.impuesto()) AS total_final FROM libro l GROUP BY genero HAVING COUNT(*) > 1;

precio final Supóngase que el precio final de un libro se requiere constantemente… Se puede crear una función llamada precio_final la cual invoca a las otras dos funciones para obtener el valor final del libro

ALTER TYPE libro_tip ADD MEMBER FUNCTION precio_final (tiquete IN NUMBER) RETURN NUMBER CASCADE; Ver otras opciones de modificación de tipos más adelante Evolución de tipos

Se debe crear de nuevo todo el BODY agregando el siguiente código: MEMBER FUNCTION precio_final precio_final(tiquete IN NUMBER) RETURN NUMBER IS BEGIN RETURN (precio_base - descuento(tiquete) + impuesto); precio_final END precio_final; Acá no requiere ()

Ahora ya es posible: SELECT titulo, l.precio_final(1) AS pfinal FROM libro l WHERE l.precio_final(1) > 10000; Notas Notas: Todavía se pueden invocar a las funciones descuento e impuesto y cada una se puede alterar independientemente … La función precio_final oculta todo el proceso del descuento y del impuesto

Un ejemplo con recursividad: Árboles Binarios CREATE OR REPLACE TYPE nodo_tipo AS OBJECT( izq REF nodo_tipo, dato NUMBER(5), der REF nodo_tipo, MEMBER FUNCTION inorden RETURN VARCHAR); / CREATE TABLE nodo OF nodo_tipo;

CREATE OR REPLACE TYPE BODY nodo_tipo AS MEMBER FUNCTION inorden RETURN VARCHAR AS in_izq VARCHAR2(100); in_der VARCHAR2(100); BEGIN IF izq IS NOT NULL THEN SELECT n.inorden() INTO in_izq FROM nodo n WHERE REF(n) = SELF.izq; END IF; IF der IS NOT NULL THEN SELECT n.inorden() INTO in_der FROM nodo n WHERE REF(n) = SELF.der; END IF; RETURN in_izq || ' ' || dato || ' ' || in_der; END; / Desafortunadamente, lo siguiente es inválido en PL/SQL: in_izq := izq.inorden(); o in_izq := SELF.izq.inorden(); Por eso se requiere el SELECT … INTO…que debería ser innecesario…

Sea el árbol:

Primero se insertan las hojas 721, 722 y 731: INSERT INTO nodo VALUES(NULL, 721, NULL); INSERT INTO nodo VALUES(NULL, 722, NULL); INSERT INTO nodo VALUES(NULL, 731, NULL); Ahora las subraíces 72 y 73: INSERT INTO nodo VALUES((SELECT REF(n) FROM nodo n WHERE dato=721), 72, (SELECT REF(n) FROM nodo n WHERE dato=722)); INSERT INTO nodo VALUES(NULL, 73, (SELECT REF(n) FROM nodo n WHERE dato=731));

--Ahora la raíz: INSERT INTO nodo VALUES((SELECT REF(n) FROM nodo n WHERE dato=72), 7, (SELECT REF(n) FROM nodo n WHERE dato=73)); Finalmente, la consulta: SELECT n.dato, n.inorden() AS rec_inorden FROM nodo n;

¿Qué pasa si se borra la tupla apuntada por un puntero? DELETE FROM nodo WHERE dato = 731; SELECT n.der.dato FROM nodo n WHERE dato = 73; SELECT dato FROM nodo WHERE der IS DANGLING;