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

Slides:



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

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..
Ejercicios Solemne 2 Parte 1
LENGUAJE ESTRUCTURADO DE CONSULTA “SQL”
BASE DE DATOS OBJETO RELACIONAL
Implementación de funciones definidas por el usuario
Introducción a Transact-SQL
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.
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.
Componentes sintácticos
UNITA - IBARRA TRIGGERS
tipo de datos uniqueidentifier
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)
SQL: Lenguaje de Interrogación Estructurado. Vistas Declaración de vista CREATE VIEW ( ) AS SELECT... Semántica Tabla virtual cuyo contenido es el resultado.
Bases de Datos 1 Prof. Daniel Obando Fuentes. USE USE {database}; Cambia el contexto de base de datos Es decir, dice cuál es la base de datos que se utilizará.
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.
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
LENGUAJE ESTRUCTURADO DE CONSULTAS
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.
Prof. De Bases de Datos: Lcdo. Luis Peña. El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL, Structured Query.
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,
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
(Lenguaje de consulta estructurado)
Bases de Datos SQL.
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.
INTEGRACION DE LAS TECNOLOGIAS DE LA INFORMACION Y COMUNICACION Implementación de base de datos (Lenguaje de manipulación de datos) Ing. Linda Masias Morales.
DML Transact SQL Sesión IX Introducción a los procedimientos almacenados.
Implementación de funciones definidas por el usuario.
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.
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.
DAI - Ing. Arturo Rozas Huacho Tablas Cruzadas Sistemas de Base de Datos Para entender el concepto de tablas cruzadas, veamos el siguiente ejemplo:
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

Otro ejemplo con el árbol Analizar el siguiente ejemplo: Por Niveles

Evolución de tipos Por medio del comando ALTER TYPE se puede alterar un tipo así:  Agregar y quitar atributos  Agregar y quitar métodos  Otras opciones, por ejemplo, cambiar las cláusulas de herencia y de instanciabilidad (ver luego), incrementar el tamaño de atributos numéricos o de caracteres, entre otras.

Agregando y quitando un atributo: DROP TYPE person_typ FORCE; CREATE TYPE person_typ AS OBJECT( nombre VARCHAR(20), apellido VARCHAR(20), edad NUMBER(3)); / DROP TABLE person_tab; CREATE TABLE person_tab OF person_typ; INSERT INTO person_tab VALUES(person_typ('Juan','Smith',1)); INSERT INTO person_tab VALUES('Steve','Jaramillo', 90); SELECT * FROM person_tab;

ALTER TYPE person_typ ADD ATTRIBUTE (dob DATE), DROP ATTRIBUTE edad CASCADE INCLUDING TABLE DATA; INCLUDING INCLUDING TABLE DATA el cambio en los datos se hace immediatamente NOT INCLUDING NOT INCLUDING TABLE DATA el cambio se produce cuando los datos son consultados* INCLUDING es la opción predeterminada * O cuando se realiza, por ejemplo, un ALTER TABLE UPGRADE…

DROP TYPE libro_tip FORCE; CREATE OR REPLACE TYPE libro_tip AS OBJECT( idlib NUMBER(5), titulo VARCHAR2(30), MEMBER FUNCTION imprima_titulo RETURN VARCHAR); / CREATE OR REPLACE TYPE BODY libro_tip AS MEMBER FUNCTION imprima_titulo RETURN VARCHAR IS BEGIN RETURN 'El titulo es: ' || titulo; END; /

DROP TABLE libro; CREATE TABLE libro OF libro_tip; INSERT INTO libro VALUES(10, 'Dracula'); SELECT l.imprima_titulo() FROM libro l; Se agrega un atributo: ALTER TYPE libro_tip ADD ATTRIBUTE (autor VARCHAR2(20)) CASCADE; Se quita un método: ALTER TYPE libro_tip DROP MEMBER FUNCTION imprima_titulo RETURN VARCHAR CASCADE;

Se agrega un método: ALTER TYPE libro_tip ADD MEMBER FUNCTION imp_tit_y_aut RETURN VARCHAR CASCADE; Ahora hay que cambiar el BODY: CREATE OR REPLACE TYPE BODY libro_tip AS MEMBER FUNCTION imp_tit_y_aut RETURN VARCHAR IS BEGIN RETURN 'El titulo es: ' || titulo || ' y el autor es: ' || NVL(autor,'Anónimo'); END; /

Se comprueba invocando el nuevo método: SELECT l.imp_tit_y_aut() FROM libro l; El autor está en nulo y por lo tanto sale anónimo… UPDATE libro SET autor = 'Bram Stoker' WHERE idlib = 10;

Un ejemplo con constructor de usuario CREATE OR REPLACE TYPE animal_type AS OBJECT( nombre VARCHAR2(20), especie VARCHAR2(20), CONSTRUCTOR FUNCTION animal_type (nom VARCHAR2) RETURN SELF AS RESULT ); / Notas: 1. El nombre del constructor debe ser el mismo del tipo. 2. Se pueden tener también varios constructores (sobrecarga).

CREATE OR REPLACE TYPE BODY animal_type AS CONSTRUCTOR FUNCTION animal_type(nom VARCHAR2) RETURN SELF AS RESULT IS BEGIN SELF.nombre := nom; SELF.especie := 'Desconocida'; RETURN; END; / DECLARE a1 animal_type := animal_type('León','Panthera Leo'); a2 animal_type := animal_type('Gato'); BEGIN DBMS_OUTPUT.PUT_LINE(a1.nombre || ' ' || a1.especie); DBMS_OUTPUT.PUT_LINE(a2.nombre || ' ' || a2.especie); END; /

Los valores de retorno al igual que los parámetros de un método pueden a su vez ser instancias de tipos. Veamos el primer caso. Instancias como valor de retorno de una función

CREATE OR REPLACE TYPE par_type AS OBJECT( x NUMBER, y NUMBER); / CREATE OR REPLACE TYPE num_type AS OBJECT( valor NUMBER, MEMBER FUNCTION devuelve_par RETURN par_type); / CREATE OR REPLACE TYPE BODY num_type AS par_type MEMBER FUNCTION devuelve_par RETURN par_type IS BEGIN RETURN par_type(valor+valor, valor*valor); END; /

CREATE TABLE num OF num_type; INSERT INTO num VALUES (10); INSERT INTO num VALUES (20); SELECT o.devuelve_par() FROM num o; SELECT o.devuelve_par().x FROM num o; devuelve_par es una función del tipo num_type y devuelve un par_type

Ahora se verá como enviar una instancia de un tipo como un parámetro. En este mismo ejemplo también se verá la sobrecarga de métodos. Supóngase una librería universitaria con las siguientes condiciones: Sobrecarga de métodos e instancias como parámetros

El precio final de un libro será su precio base menos un descuento que se aplica así. Si el comprador es - Un estudiante: el descuento será el 15% sobre el valor de la matrícula si el estudiante es monitor o 10% de lo contrario. - Un particular: el descuento será el 2% sobre el valor del precio base del libro. estudiante son Los atributos de un un estudiante son: carnénombrevalor_matmonitor_sn carné, nombre, valor_mat, monitor_sn

DROP TYPE estudiante_type FORCE; CREATE OR REPLACE TYPE estudiante_type AS OBJECT( carnenombre carne NUMBER(10), nombre VARCHAR(10), valor_matmonitor_sn valor_mat NUMBER(7), monitor_sn CHAR(1) ); / DROP TABLE estudiante; estudiante CREATE TABLE estudiante OF estudiante_type; INSERT INTO estudiante VALUES(345,'Petra',1000,'s'); INSERT INTO estudiante VALUES(100,'Dino',2000,'n');

El tipo libro: DROP TYPE libro_tip FORCE; CREATE OR REPLACE TYPE libro_tip AS OBJECT( --Atributos: titulo titulo VARCHAR2(30), precio_base precio_base NUMBER(6), --Métodos: MEMBER FUNCTION precio_final RETURN NUMBER, NUMBER MEMBER FUNCTION precio_final(car NUMBER) RETURN NUMBER); / Recibe como parámetro el carné del estudiante Métodos sobrecargados

CREATE OR REPLACE TYPE BODY libro_tip AS MEMBER FUNCTION precio_final RETURN NUMBER IS BEGIN RETURN precio_base - 2 * precio_base/100; END; MEMBER FUNCTION precio_final(car NUMBER) RETURN NUMBER IS descuento NUMBER(8); BEGIN SELECT CASE WHEN monitor_sn = 's' THEN valor_mat*15/100 ELSE valor_mat*10/100 END CASE INTO descuento FROM estudiante WHERE carne = car; RETURN precio_base - descuento; END precio_final; END; /

DROP TABLE libro; CREATE TABLE libro OF libro_tip (titulo PRIMARY KEY); INSERT INTO libro VALUES('Dracula',10000); INSERT INTO libro VALUES('Lips Unsealed',15000); INSERT INTO libro VALUES('Take it like a Man',5000); INSERT INTO libro VALUES('The Sign of Four', 5000);

SELECT l.precio_final(345) FROM libro l; SELECT l.precio_final() FROM libro l;

Nótese que el método precio_final queda dependiente de la tabla estudiante. Otra opción es enviarle el objeto como parámetro: DROP TYPE libro_tip FORCE; CREATE OR REPLACE TYPE libro_tip AS OBJECT( --Atributos: titulo titulo VARCHAR2(30), precio_base precio_base NUMBER(6), --Métodos: MEMBER FUNCTION precio_final RETURN NUMBER, estudiante_type MEMBER FUNCTION precio_final(e estudiante_type) RETURN NUMBER); /

CREATE OR REPLACE TYPE BODY libro_tip AS MEMBER FUNCTION precio_final RETURN NUMBER IS BEGIN RETURN precio_base - 2*precio_base/100; END; MEMBER FUNCTION precio_final(e estudiante_type) RETURN NUMBER IS descuento NUMBER(8); BEGIN IF e.monitor_sn = 's' THEN descuento := 15; ELSE descuento := 10; END IF; RETURN precio_base - (e.valor_mat) * descuento/100; END precio_final; END; /

Crear la tabla…Ahora, ¿cómo invocar el método? SELECT l.precio_final( * (SELECT * FROM estudiante WHERE carne = 345)) FROM libro l WHERE titulo = 'Dracula'; No funciona, tampoco: SELECT l.precio_final( (SELECT carne, nombre, valor_mat, monitor_sn FROM estudiante WHERE carne = 345)) FROM libro l WHERE titulo = 'Dracula';

* Diferencia entre * y VALUE(): SELECT * FROM estudiante; CARNE NOMBRE VALOR_MAT MONITOR_SN Petra 10 s 100 Dino 200 s SELECT VALUE(e) FROM estudiante e; VALUE(E)(CARNE, NOMBRE, VALOR_MAT, MONITOR_SN) ESTUDIANTE_TYPE(345, 'Petra', 10, 's') ESTUDIANTE_TYPE(100, 'Dino', 200, 's')

Por lo tanto, la solución es: SELECT l.precio_final((SELECT VALUE(e) FROM estudiante e WHERE carne = 345)) AS total FROM libro l WHERE titulo = 'Dracula'; Ojo: La consulta que provee el parámetro debe devolver un único valor. Aunque también se puede construir el objeto así: SELECT l.precio_final( (SELECT estudiante_type(carne, nombre, valor_mat, monitor_sn) FROM estudiante WHERE carne = 345)) AS total FROM libro l WHERE titulo = 'Dracula'; Pero es más simple el uso de VALUE…

¿Qué hace la siguiente consulta?: SELECT carne, l.precio_final(VALUE(e)) AS total FROM libro l, estudiante e WHERE titulo = 'Dracula';