01/12/07Seminario de Bases de Datos1 Características Objeto Relacionales en Oracle 10G* * Tomado del curso de Francisco Moreno.

Slides:



Advertisements
Presentaciones similares
¿Cómo hacer los ejercicios prácticos de Access?
Advertisements

SQL Sigla del nombre “Structured Query Language”.
integridad referencial
Ejercicios Solemne 2 Parte 1
LENGUAJE ESTRUCTURADO DE CONSULTA “SQL”
BASE DE DATOS OBJETO RELACIONAL
09/02/2014Curso Bases de Datos1 Ejemplos Álgebra Relacional.
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).
Presentación Asignatura POF030 Semana 1. Contenido En forma general, los conceptos que se estudiarán en la asignatura son: – Procedures – Functions –
01/12/07Seminario de Bases de Datos1 Características Objeto Relacionales en Oracle 10G* * Tomado del curso de Francisco Moreno.
25/11/07Laboratorio de Bases de Datos1 PL/SQL* *Tomado del curso de Francisco Moreno.
11/06/201424/11/06Lab. Bases de Datos1 JSP y Bases de Datos * * Tomado del curso de Francisco Moreno.
Julio Pacheco SQL SERVER 2005 XML APRENDIENDO CON EJEMPLOS.
EL LENGUAJE ESTÁNDAR SQL
DATAWAREHOUSE.
ALGEBRA RELACIONAL.
MODELOS DE DATOS.
MODELO RELACIONAL.
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
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.
4/7/2015Curso Bases de Datos1 MODELO DE OBJETOS SEMÁNTICOS Francisco Moreno.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
MySQL M.C. Pedro Bello López.
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.
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:
Triggers(Disparadores)
Características Objeto Relacionales en Oracle
Características Objeto-Relacionales en Oracle Francisco Moreno Universidad Nacional.
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 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.
Comandos de SQL Prog. Orientada a Eventos. Inserción de datos (INSERT) INSERT….VALUES INSERT INTO Tabla1 (Columna1, Columna2…) VALUES (‘ValorAlfa’, ValorNum…);
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
SQL Lenguaje Estructurado de Consultas. Structured Query Lenguaje (SQL). Lenguaje de acceso a bases de datos. Proyecto de Investigación de IBM. La mayoria.
Bases de Datos SQL.
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.
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.
6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.
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
Transcripción de la presentación:

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 Datos2 Colecciones: VARRAYS ( ARRAY s Variables) Los VARRAY s son el equivalente a los ARRAY s de SQL:2003 Todos los elementos del VARRAY son del mismo tipo Al igual que las tablas anidadas sus elementos pueden pertenecer a un tipo: - Primitivo - Definido por el usuario - Incluso el de otro VARRAY ( VARRAY de VARRAY s etc.)

01/12/07Seminario de Bases de Datos3 VARRAY S Los VARRAY s pueden verse como tablas anidadas limitadas (soportan un número límite de elementos) El total de elementos del VARRAY está determinado por el número de elementos activos (existentes) en el VARRAY (no puede sobrepasar el máximo que se defina)

01/12/07Seminario de Bases de Datos4 tipo Similarmente a las tablas anidadas, se debe definir el tipo para el VARRAY Ejemplo: DROP TYPE s FORCE; CREATE TYPE s AS VARRAY(10) OF VARCHAR2(20); / Ya con este tipo se pueden declarar columnas, parámetros, valores de retorno etc. VARRAY S

01/12/07Seminario de Bases de Datos5 Se puede cambiar el tipo de los elementos que componen un VARRAY así*: ALTER TYPE s MODIFY ELEMENT TYPE VARCHAR2(30) CASCADE; Es posible cambiar el tamaño* de un VARRAY así: ALTER TYPE s MODIFY LIMIT 15 CASCADE; * Aplican restricciones…(tamaño mayor tanto en el límite como el tipo de datos) VARRAY S

01/12/07Seminario de Bases de Datos6 VARRAY s Veamos un ejemplo en el cual se va a crear una tabla de departamentos y a cada departamento se le colocará un VARRAY de REF s correspondiente a los empleados que trabajan en dicho dpto. Es decir un ¡ VARRAY de punteros!

01/12/07Seminario de Bases de Datos7 Ejemplo Modelo Entidad Relación DPTO # código * nombre * conmutador EMPLEADO # cédula * nombre adscrito a conformado por

01/12/07Seminario de Bases de Datos8 Relacional Relacional: 3 Tablas DPTO DPTO #código *nombre *conmutador EMPLEADO EMPLEADO #cédula *nombre Objeto relacional Objeto relacional Primera forma con REFs: -Crear los tipos para dpto, empleado y dptoxemp -Crear las tablas tipadas correspondientes -En el tipo dptoxemp las dos claves foráneas se convierten en REFs. DPTOxEMP DPTOxEMP #cédula (cf) #código (cf)

01/12/07Seminario de Bases de Datos9 Objeto relacional Objeto relacional: Segunda forma con VARRAY s Se crea un tipo VARRAY para manejar los punteros a los empleados Se debe colocar un máximo de empleados por departamento objetos ¿Por qué un VARRAY de punteros a empleados en vez de un VARRAY de objetos empleados?

01/12/07Seminario de Bases de Datos10 Gráficamente: conmutador VacíoAseo 38 Cont. 20 Ventas 11mis_empsnombrecódigo 543BC1AE1FE2DPTO EMP cédulanombreoid 10AnaFE2… 20BetoAE1… 40Rolli43E… 90LaloBC1… 80Sara543… 54343E Punteros

01/12/07Seminario de Bases de Datos11 Se crea el tipo y la tabla para los empleados: DROP TYPE emp_tip FORCE; CREATE OR REPLACE TYPE emp_tip AS OBJECT( cedula VARCHAR2(8), nombre VARCHAR2(15) ); / DROP TABLE EMPLEADO; CREATE TABLE empleado OF emp_tip (cedula PRIMARY KEY); Implementación

01/12/07Seminario de Bases de Datos12 INSERT INTO empleado VALUES('10','Ana'); INSERT INTO empleado VALUES('20','Beto'); INSERT INTO empleado VALUES('40','Rolli'); INSERT INTO empleado VALUES('90','Lalo'); INSERT INTO empleado VALUES('80','Sara'); Ahora se crea un tipo VARRAY de 10 posiciones de apuntadores a empleados: DROP TYPE emp_varray FORCE; CREATE OR REPLACE TYPE emp_varray AS VARRAYOF REF VARRAY(10) OF REF emp_tip; /

01/12/07Seminario de Bases de Datos13 Se crea la tabla de departamentos: a cada departamento se le coloca su vector de punteros a empleados: DROP TABLE dep; CREATE TABLE dep( codigo NUMBER(3) PRIMARY KEY, nombre VARCHAR2(10), conmutador NUMBER(10), emp_varray mis_emps emp_varray ); Por supuesto dep podría ser una tabla tipada…

01/12/07Seminario de Bases de Datos14 Inserción INSERT INTO dep VALUES (11,'Ventas', 2103, emp_varray( (SELECT REF(e) FROM empleado e WHERE cedula ='10'), (SELECT REF(e) FROM empleado e WHERE cedula ='20'), (SELECT REF(e) FROM empleado e WHERE cedula ='90'), (SELECT REF(e) FROM empleado e WHERE cedula ='80') ) );

01/12/07Seminario de Bases de Datos15 INSERT INTO dep VALUES (20, 'Cont', 2132, emp_varray( ( SELECT REF(e) FROM empleado e WHERE cedula='40'), ( SELECT REF(e) FROM empleado e WHERE cedula='80') ) ); INSERT INTO dep VALUES (38, 'Aseo', 3390, emp_varray() ); Vacío, también puede ser NULL… (aunque no son equivalentes)

01/12/07Seminario de Bases de Datos16 La siguiente consulta imprime cada dpto con el REF de sus empleados: SELECT * FROM dep; Si se desea imprimir cada dpto junto con la información de cada uno de sus empleados se debe proceder así: Selección

01/12/07Seminario de Bases de Datos17 1. Observar el resultado de: SELECT nombre, e.* FROM dep, TABLE(mis_emps) e; COLUMN_VALUE ¿De dónde surge la columna: COLUMN_VALUE ? Nota: Nota: Se acude al operador TABLE para producir el desanidamiento de la colección al igual que en las tablas anidadas

01/12/07Seminario de Bases de Datos18 2. Por lo tanto es posible: SELECT nombre, e.COLUMN_VALUE FROM dep, TABLE(mis_emps) e; 3. Ahora se aplica el dereferenciamiento: SELECT nombre, DEREF(e.COLUMN_VALUE) from dep, TABLE(mis_emps) e; Nota: El alias e es opcional en este caso.

01/12/07Seminario de Bases de Datos19 Ahora supóngase que se desea sólo un atributo del empleado: SELECT nombre, e.COLUMN_VALUE.cedula AS ced e FROM dep, TABLE(mis_emps) e; e En este caso el alias e es indispensable…

01/12/07Seminario de Bases de Datos20 No existe soporte en el SQL de Oracle para inserción, actualización o borrado de los elementos de un VARRAY. Entonces ¿Cómo realizar estas acciones? Se debe acudir a PL/SQL. Veamos un ejemplo: Inserción de un empleado a un departamento. Se creará un procedimiento para realizarlo.

01/12/07Seminario de Bases de Datos21 CREATE OR REPLACE PROCEDURE midepmiemp insemp(midep IN NUMBER, miemp IN VARCHAR) AS varr emp_varray; /* Se declara un VARRAY de punteros a empleados */ un refmiemp REF emp_tip;-- Puntero a un empleado BEGIN --Se obtiene el vector de empleados del dpto --enviado: SELECT mis_emps INTO varr FROM dep c WHERE c.codigo = midep; Continúa… Cédula del empleado

01/12/07Seminario de Bases de Datos22 --Se comprueba que no se está en el límite del --vector IF varr.COUNT = 10 THEN RAISE_APPLICATION_ERROR(-20564, 'No hay sitio para otro emp. en el dpto '||midep); END IF; --Se obtiene el REF del empleado enviado SELECT REF(e) INTO refmiemp FROM empleado e WHERE cedula = miemp; Continúa…

01/12/07Seminario de Bases de Datos23 --Comprobar que el emp. no esté repetido FOR contador IN 1..varr.COUNT LOOP IF varr(contador) = refmiemp THEN RAISE_APPLICATION_ERROR(-20764, 'El emp '|| miemp|| ' ya trabaja en el dpto ' ||midep); END IF; END LOOP; Continúa… Nótese como se accesa un elemento del VARRAY.

01/12/07Seminario de Bases de Datos24 --Prepara el VARRAY para un nuevo elemento varr.EXTEND; varr(varr.COUNT) := refmiemp; --Asigna el elemento --¡Actualizar en la base de datos! UPDATE dep c SET mis_emps= varr WHERE c.codigo = midep; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20111,'Dato no existe'); END; /

01/12/07Seminario de Bases de Datos25 Los atributos EXTEND, COUNT, DELETE y otros funcionan también funcionan también con tablas anidadas en PL/SQL. En PL/SQL una tabla anidada se puede manipular igual que un VARRAY. En PL/SQL una tabla anidada se puede manipular igual que un VARRAY. Invocación del procedimiento: EXECUTE insemp('38','10'); Ejercicio: Realizar un procedimiento para eliminar un empleado de un dpto. Aseo Ana

01/12/07Seminario de Bases de Datos26 Considere el siguiente caso: En una institución se pueden formar comités máximo Cada comité tiene un nombre, una descripción y máximo 5 miembros Cada miembro puede ser un profesor, un estudiante o un empleado (no docente) aparte Sin embargo todo comité debe tener un director y ese director tiene que ser un profesor (el director es un miembro aparte de los otros 5 miembros)

01/12/07Seminario de Bases de Datos27 --Se crea el tipo persona abstracto y no final: DROP TYPE person_type FORCE; CREATE TYPE person_type AS OBJECT( ced NUMBER(8), name VARCHAR2(10) )NOT INSTANTIABLE NOT FINAL; / --Se crean los subtipos: DROP TYPE teacher_type FORCE; CREATE TYPE teacher_type UNDER person_type( registro NUMBER(5)); / DROP TYPE student_type FORCE; CREATE TYPE student_type UNDER person_type( nro_creditos NUMBER(3)); / DROP TYPE emp_type FORCE; CREATE TYPE emp_type UNDER person_type( salario NUMBER(5)); /

01/12/07Seminario de Bases de Datos28 --Se crean las tablas tipadas: DROP TABLE profesor; CREATE TABLE profesor OF teacher_type; INSERT INTO profesor VALUES(15,'Lisa',10); INSERT INTO profesor VALUES (23,'Paddy',20); INSERT INTO profesor VALUES (39,'George',30); DROP TABLE estudiante; CREATE TABLE estudiante OF student_type; INSERT INTO estudiante VALUES (42,'Belinda',4); INSERT INTO estudiante VALUES (55,'Mariah',5); INSERT INTO estudiante VALUES (69,'Cathy',6); DROP TABLE empleado; CREATE TABLE empleado OF emp_type; INSERT INTO empleado VALUES (76,'Dido',700); INSERT INTO empleado VALUES (83,'Kylie',800); INSERT INTO empleado VALUES (91,'Kirsty',900);

01/12/07Seminario de Bases de Datos29 --Se crea el tipo VARRAY de punteros a miembros: DROP TYPE per_var FORCE; CREATE TYPE per_var AS VARRAY(5) OF REF person_type; / DROP TABLE comite; CREATE TABLE comite( nomcomite VARCHAR2(10), per_var miembros per_var, teacher_type director REF teacher_type NOT NULL );

01/12/07Seminario de Bases de Datos30 INSERT INTO comite VALUES('Juego', per_var( (SELECT REF(e) FROM estudiante e WHERE ced=42), (SELECT REF(p) FROM profesor p WHERE ced=15), (SELECT REF(e) FROM empleado e WHERE ced=76) ), (SELECT REF(p) FROM profesor p WHERE ced=39) ); SELECT nomcomite, DEREF(COLUMN_VALUE) FROM comite c, TABLE(c.miembros); SELECT nomcomite, DEREF(director), DEREF(COLUMN_VALUE) FROM comite c, TABLE(c.miembros);

01/12/07Seminario de Bases de Datos31 INSERT INTO comite VALUES('Aseo', per_var( (SELECT REF(e) FROM estudiante e WHERE ced=42), (SELECT REF(p) FROM profesor p WHERE ced=15), (SELECT REF(e) FROM empleado e WHERE ced=76) ), (SELECT REF(p) FROM estudiante p WHERE ced=55) ); Se rechaza porque ¡los punteros también tiene tipo! Ejercicio: Realizar un trigger que controle que todos los miembros de un comité sean todos del mismo tipo, es decir todos estudiantes o todos empleados etc. El trigger debe validar además que el director no sea uno de los miembros del VARRAY.

01/12/07Seminario de Bases de Datos32 Tablas anidadas VS. VARRAY s Almacenadas out of line Se pueden indexar No limitadas en número de elementos Soporte para INSERT, DELETE, UPDATE directos Apropiada para grandes conjuntos de elementos Almacenados in-line (si < 4k) No soportan índices Límite en el número de elementos ampliarlo es incómodo Requiere PL/SQL para insertar, borrar y actualizar Útil para conjuntos pequeños y que posean un límite conocido y estable su tiempo de respuesta es muy bueno Tablas Anidadas VARRAYS