Características Objeto Relacionales en Oracle

Slides:



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

BASE DE DATOS OBJETO RELACIONAL
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.
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
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.
Ing. Ricardo Carlos Inquilla Quispe
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.
Práctica: Sistema de control de ventas y almacenaje para grandes almacenes 03/12/11.
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.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
Structured Query Language (Lenguaje Estructurado de Consultas)
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; /*==============================================================*/
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.
SQL Lenguaje Estructurado de Consultas. Structured Query Lenguaje (SQL). Lenguaje de acceso a bases de datos. Proyecto de Investigación de IBM. La mayoria.
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.
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.
Apuntes PL-SQL Triggers II. Tipos de datos compuestos Registros PL/SQL: Son similares a un tipo struct en C o a un tipo Registro en otros 3GL. Se componen.
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.
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.
4 Excepciones 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 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.
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.
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.
Francisco Moreno Bases de Datos II Universidad Nacional
PL/SQL Francisco Moreno Universidad Nacional.
SQL: Structured Query Language
PL/SQL Francisco Moreno Universidad Nacional.
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.
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.
Orígenes Funciones Condicionales
Oracle Pl/SQl Developer – Nivel 1
UN EJEMPLO DE LECTURA CONSISTENTE EN INNODB
Unidad V :- Integridad de datos.
Características Objeto Relacionales en Oracle
Capítulo 7 USO DE BASES DE DATOS OBJETO- RELACIONALES.
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.
Lenguaje de definición de datos. Un lenguaje de base de datos o lenguaje de definición de datos es un lenguaje proporcionado por el sistema de gestión.
Transcripción de la presentación:

Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional

Colecciones: VARRAYS (Variable ARRAYs) En la intersección de una fila y de una columna se puede tener un arreglo (colección de elementos indexados). En Oracle se denomina VARRAY Todos los elementos del VARRAY son del mismo tipo de datos Al igual que las tablas anidadas sus elementos pertenecen a un tipo de datos: - Primitivo - Definido por el usuario: puede ser incluso el de otro VARRAY (VARRAY de VARRAYs)

VARRAYS El total de elementos del VARRAY no puede sobrepasar el tamaño definido Los VARRAYs se pueden considerar como tablas anidadas limitadas (soportan un número limitado de elementos) Al igual que para las tablas anidadas, se debe definir el tipo para el VARRAY

Modelo Entidad Relación Ejemplo Modelo Entidad Relación conformado por DPTO # código * nombre * conmutador EMPLEADO # cédula * nombre adscrito a

VARRAYs A continuación se crea una tabla de departamentos y a cada departamento se le colocará un VARRAY de REFs correspondiente a los empleados que trabajan en dicho dpto, es decir, un VARRAY de punteros.

Gráficamente: código nombre conmutador mis_emps 11 Ventas 2103 20 Note que el empleado con puntero 543 trabaja en dos dptos. DPTO código nombre conmutador mis_emps 11 Ventas 2103 20 Cont. 2132 38 Aseo 3390 Vacío FE2 AE1 BC1 543 43E 543 EMP cédula nombre oid 10 Ana FE2 Punteros 20 Beto AE1 40 Rolli 43E 90 Lalo BC1 80 Sara 543

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

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. Cada posición guarda el puntero de un empleado: DROP TYPE emp_varray FORCE; CREATE OR REPLACE TYPE emp_varray AS VARRAY(10)OF REF emp_tip; /

Se crea la tabla de departamentos: cada departamento tiene su VARRAY de punteros a empleados: DROP TYPE dep_tip FORCE; CREATE TYPE dep_tip AS OBJECT( codigo NUMBER(3), nombre VARCHAR2(10), conmutador NUMBER(10), mis_emps emp_varray); / DROP TABLE dep; CREATE TABLE dep OF dep_tip(codigo PRIMARY KEY, mis_emps NOT NULL);

Se insertan los datos del dpto 11: 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), WHERE cedula = 90), WHERE cedula = 80) ) );

Se insertan los datos de los dptos 20 y 38: 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) ) ); (38, 'Aseo', 3390, emp_varray() Array vacío (no es equivalente a array NULL)

Selección La siguiente consulta imprime cada dpto con el REF* de sus empleados: SELECT * FROM dep; Para imprimir cada dpto junto con los datos de cada uno de sus empleados se procede así: * Nota: algunos productos imprimen los datos de los empleados en vez de su puntero.

Acá también surge la columna: COLUMN_VALUE: SELECT nombre, e.COLUMN_VALUE FROM dep, TABLE(mis_emps) e; SELECT nombre, DEREF(e.COLUMN_VALUE)

SELECT nombre, e.COLUMN_VALUE.cedula AS ced FROM dep, TABLE(mis_emps) e; O también: DEREF(e.COLUMN_VALUE).cedula AS ced

Poco soporte en el SQL de Oracle para inserción, actualización o borrado de los elementos de un VARRAY. Para estas operaciones se recomienda usar PL/SQL. Veamos un ejemplo: Inserción de un empleado en un departamento. Se crea un procedimiento:

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

/*Se comprueba que no se está en el límite del VARRAY*/ IF varr.COUNT = varr.LIMIT 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…

--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; Nótese como se accede a un elemento del VARRAY. Continúa…

--Prepara el VARRAY para un nuevo elemento varr.EXTEND; --Activa la celda y le pone un null varr(varr.COUNT) := refmiemp; --Asigna el elemento --¡Actualizar en la base de datos! UPDATE dep SET mis_emps = varr WHERE codigo = midep; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20111,'Dato no existe'); END; / Nota: si se hace un EXTEND y el VARRAY está lleno, genera error: ORA-06532: Subscript outside of limit

Nota: Recordar que en PL/SQL una tabla anidada se puede manipular igual que un VARRAY. Los atributos EXTEND, COUNT, DELETE y otros también funcionan con tablas anidadas en PL/SQL. Invocación del procedimiento: EXECUTE insemp(38,40); EXECUTE insemp(38,80);

Agregar al tipo emp_tip un método que devuelva un VARRAY con los punteros de los departamentos en los que trabaja cada empleado. DROP TYPE dep_varray FORCE; CREATE OR REPLACE TYPE dep_varray AS VARRAY(10) OF REF dep_tip; / ALTER TYPE emp_tip ADD MEMBER FUNCTION mis_deps RETURN dep_varray CASCADE;

CREATE OR REPLACE TYPE BODY emp_tip AS MEMBER FUNCTION mis_deps RETURN dep_varray IS mi_ref REF emp_tip; v_deps dep_varray := dep_varray(); BEGIN --Se obtiene el REF del empleado que invoca al método SELECT REF(e) INTO mi_ref FROM empleado e WHERE e.cedula = SELF.cedula; Continúa…

FOR mi_d IN (SELECT mis_emps,REF(d) AS dref FROM dep d) LOOP --Ver si el empleado está en el varray FOR i IN 1..mi_d.mis_emps.COUNT LOOP IF mi_d.mis_emps(i) = mi_ref THEN v_deps.EXTEND; v_deps(v_deps.COUNT) := mi_d.dref; EXIT; --Sale del ciclo interno END IF; END LOOP; RETURN v_deps; END; / Como siempre se deben controlar posibles excepciones…

Ahora se puede ejecutar: SELECT e.cedula, e.mis_deps() FROM empleado e; SELECT e.cedula, t.COLUMN_VALUE.codigo AS cod FROM empleado e, TABLE(e.mis_deps()) t; SELECT e.cedula, DEREF(t.COLUMN_VALUE)

Una alternativa es redundar datos y colocarle a cada empleado su VARRAY de REFs de departamentos donde trabaja Se debe evaluar si se justifica hacerlo: analizar aspectos de almacenamiento, consistencia, velocidad, mantenimiento de código, entre otros. En conclusión, ver cuales son las prioridades y procurar un balance…

Tablas anidadas Vs. VARRAYs Almacenadas out of line Se columnas se pueden indexar* No limitadas en número de elementos Soporte “directo” en SQL para INSERT, DELETE y UPDATE de filas de la tabla anidada Apropiadas para grandes conjuntos de elementos Almacenados in-line (si < 4k) No soportan índices Limitados en el número de elementos  aunque se puede ampliar Se recomienda PL/SQL para insertar, borrar y actualizar elementos del varray Útiles para conjuntos “pequeños” y que posean un límite conocido y estable  su tiempo de respuesta es “bueno” * Ejemplo. CREATE INDEX nest_prod ON store_detalles(id_producto); Ver la presentación de tablas anidadas.

Ejercicios Crear un procedimiento que elimine un empleado de un dpto. Imprimir el código de todos los departamentos que tienen el mismo conjunto de empleados que el dpto 20. Agregar al tipo emp_tip un método que devuelva un VARRAY con los codigos (no los punteros) de los departamentos en los que trabaja cada empleado.