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

Slides:



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

Ejercicios Solemne 2 Parte 1
LENGUAJE ESTRUCTURADO DE CONSULTA “SQL”
BASE DE DATOS OBJETO RELACIONAL
Fernando Velasco
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.
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
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.
Características Objeto Relacionales en Oracle
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
MySQL M.C. Pedro Bello López.
Mini curso: Inteligencia de negocios (Bodega y Minería de Datos) aplicación práctica Mauro Callejas Cuervo Ecuador, Mayo 2014 Sesión 2 – TALLER 2 Grupo.
…Tablas DDL.
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.
Integridad Referencial 1. Integridad referencial 2.
UNITA - IBARRA TRIGGERS
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.
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)‏
Triggers(Disparadores)
EXPLAIN PLAN Cómo leer los resultados del EXPLAIN PLAN
Características Objeto Relacionales en Oracle
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
LENGUAJE SQL.
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
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.
Comandos DDL Los comandos DDL son las siglas de Data Definition Language, y se corresponde con el conjunto de órdenes que permiten definir las estructuras.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
(Lenguaje de consulta estructurado)
SQL Lenguaje Estructurado de Consultas. Structured Query Lenguaje (SQL). Lenguaje de acceso a bases de datos. Proyecto de Investigación de IBM. La mayoria.
UNIVERSIDAD LATINA IV. CONSULTAS AVANZADAS CON BASES DE DATOS. E.I. L.E. Prof. Ramón Castro Liceaga.
Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Diseño de Bases de Datos Tema 4: Integridad.
Departamento de Lenguajes y Sistemas Informáticos escuela técnica superior de ingeniería informática Diseño de Bases de Datos Tema 4: Integridad.
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.
ALTER TABLE MODIFICAR LA ESTRUCTURA DE LOS OBJETOS DE UNA BASE DE DATOS.
Querys a bases de datos con MS ACCESS. DEFINAMOS LOS TERMINOS: DML=Lenguaje de manipulación de datos Las sentencias DML permiten generar consultas para.
DML Transact SQL Sesión X Triggers. Duración 2 Horas.
6 Triggers 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.
6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.
Lenguaje MySQL, DDL (Lenguaje de definición de datos) Ing. Linda Masias Morales.
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.
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.
Características Objeto Relacionales en Oracle
Transcripción de la presentación:

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

Tipos AS OBJECT CREATE TYPE nom_tipo AS OBJECT( atributos..., métodos... ) [cláusula de instanciabilidad] * [cláusula de herencia] ** ; / * Valor predeterminado: INSTANTIABLE,ver luego. ** Nota: El valor predeterminado es FINAL,ver luego. Un tipo NO es una tabla: en un tipo no se insertan datos

Ejemplo: DROP TYPE ubicacion_tip FORCE; CREATE TYPE ubicacion_tip AS OBJECT( dir VARCHAR2(20), ciudad VARCHAR2(20), pais VARCHAR2(20) ); / Tipo

DROP TABLE area; CREATE TABLE area( id NUMBER(3) PRIMARY KEY, nom VARCHAR2(10), ubicacion ubicacion_tip ); Columna tipada

INSERT INTO area VALUES(29, 'Progr', ubicacion_tip('Cl 20','Med','Col')); INSERT INTO area VALUES(13, 'Ventas', ubicacion_tip('Cl 20','Med','Col')); INSERT INTO area VALUES (35, 'Mercadeo', ubicacion_tip('Av 5', 'Mia','USA')); INSERT INTO area VALUES (99, 'Public', ubicacion_tip('Cl 20','Med','Col')); INSERT INTO area VALUES (11, 'Prod', ubicacion_tip('Cl 1','Med','Col')); Constructor

Selección: SELECT nom, ubicacion FROM area;  SELECT nom, ubicacion.pais FROM area; ¡No funciona!

Se requiere alias para acceder los atributos de una columna tipada: SELECT nom, a.ubicacion.pais FROM area a; SELECT nom, ubicacion FROM area a WHERE a.ubicacion.dir LIKE 'Cl%';

Ejemplos con PL/SQL: DECLARE u ubicacion_tip; BEGIN SELECT ubicacion INTO u FROM area WHERE id = 29; DBMS_OUTPUT.PUT_LINE(u.pais); END; / BEGIN FOR mi_e IN (SELECT ubicacion FROM area)LOOP DBMS_OUTPUT.PUT_LINE(mi_e.ubicacion.pais); END LOOP; END; /

Ejemplo: Seleccionar el id de las áreas que tienen la misma ubicación que el área 13 (es decir, que tengan el mismo dir, ciudad y pais)

Primera solución SELECT id FROM area a1 WHERE a1.ubicacion.pais = (SELECT a2.ubicacion.pais FROM area a2 WHERE id = 13) AND a1.ubicacion.ciudad = (SELECT a2.ubicacion.ciudad FROM area a2 WHERE id = 13) AND a1.ubicacion.dir = (SELECT a2.ubicacion.dir FROM area a2 WHERE id = 13); Es un poco largo e incómodo…Sin embargo, se puede mejorar:

Segunda solución SELECT id FROM area a1 WHERE (a1.ubicacion.pais, a1.ubicacion.ciudad, a1.ubicacion.dir) = (SELECT a2.ubicacion.pais, a2.ubicacion.ciudad, a2.ubicacion.dir FROM area a2 WHERE id = 13 ); Se puede mejorar más:

Tercera solución SELECT id FROM area WHERE ubicacion = (SELECT ubicacion FROM area WHERE id = 13); Ejemplo: Imprimir todas las parejas de ids de las áreas que están situadas en la misma ubicación.

Solución: SELECT a1.id, a2.id FROM area a1, area a2 WHERE a1.ubicacion = a2.ubicacion AND a1.id < a2.id; ¿Qué sucede con esta consulta?: SELECT ubicacion, COUNT(*) FROM area GROUP BY ubicacion;

Sin embargo, es posible: SELECT a.ubicacion.pais, a.ubicacion.ciudad, a.ubicacion.dir,COUNT(*) FROM area a GROUP BY a.ubicacion.pais,a.ubicacion.ciudad, a.ubicacion.dir; Luego se verá como simplificarlo un poco...

Un problema similar sucede con XMLTYPE: SELECT d, COUNT(*) FROM bodega GROUP BY d; Tampoco soporta igualdad para XMLTYPE : SELECT * FROM bodega WHERE d = d; DROP TABLE bodega; CREATE TABLE bodega( cod NUMBER(8) PRIMARY KEY, d XMLTYPE);

Tampoco funciona en este caso: CREATE TYPE x_tip AS OBJECT( doc XMLTYPE ); / DROP TABLE bodega; CREATE TABLE bodega( d x_tip); SELECT * FROM bodega WHERE d = d;

Algunas instrucciones útiles: Instrucciones para que un atributo de una columna tipada: a) Tenga un índice b) Sea obligatorio c) Sea o haga parte de la clave primaria d) Sea o haga parte de una clave alternativa

a) CREATE INDEX index_ciudad ON area(ubicacion.ciudad); b) DROP TABLE area; CREATE TABLE area (id NUMBER(3) PRIMARY KEY, nom VARCHAR2(10), ubicacion ubicacion_tip, CHECK(ubicacion.pais IS NOT NULL) ); Nota: Confrontar con: ubicacion ubicacion_tip NOT NULL

c) ALTER TABLE area DROP PRIMARY KEY; ALTER TABLE area ADD PRIMARY KEY(ubicacion.pais); d) ALTER TABLE area ADD UNIQUE(ubicacion.dir); * La opción MODIFY no funciona. Supóngase que no puede haber dos áreas en el mismo país. Si ya hay países repetidos en la tabla área, la instrucción fallará. *

También es posible hacerlo en el CREATE sin ALTER: DROP TABLE area; CREATE TABLE area (id NUMBER(3) UNIQUE, nom VARCHAR2(10), ubicacion ubicacion_tip, PRIMARY KEY(ubicacion.pais), UNIQUE(ubicacion.dir) );

CREATE TABLE empleado( code number(8) PRIMARY KEY, pais VARCHAR2(20) ); ¿Qué hace la siguiente instrucción? ALTER TABLE empleado ADD FOREIGN KEY(pais) REFERENCES area(ubicacion.pais); ¿Qué característica debe cumplir el atributo pais en ubicacion en la tabla area?

Sea: DROP TABLE t_auditoria; CREATE TABLE t_auditoria( id_area NUMBER(3), fecha DATE, ant_loc ubicacion_tip, estacion VARCHAR2(30), usuario VARCHAR2(30) );

Analizar el siguiente trigger: 1. Destruir las tablas empleado y area 2. Crear la tabla area (ver diapositiva 4) 3. Insertar las cinco filas de la diapositiva 5 4. Crear el siguiente trigger

CREATE OR REPLACE TRIGGER cambio_loc BEFORE UPDATE OF ubicacion ON area FOR EACH ROW WHEN (OLD.ubicacion.ciudad <> NEW.ubicacion.ciudad OR OLD.ubicacion.pais <> NEW.ubicacion.pais) BEGIN INSERT INTO t_auditoria VALUES(:NEW.id, SYSDATE, :OLD.ubicacion, SYS_CONTEXT('USERENV','TERMINAL'), SYS_CONTEXT('USERENV','SESSION_USER') ); END; / SYS_CONTEXT es más reciente y tiene más opciones que la función USERENV. Ver acá.acá

Ejecutar el siguiente UPDATE: UPDATE area SET ubicacion = ubicacion_tip('AV 8','Mia','USA'); Y luego: UPDATE area SET ubicacion = ubicacion_tip('AV 3','Mia','USA');