Você está na página 1de 12

BASE DE DATOS II

UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

1.- INTRODUCCIÓN A LAS BASES DE DATOS ACTIVAS

Necesidad de evolucionar independientemente de la intervención del usuario

respuesta a un suceso o una determinada situación

bases de datos tradicionales se programa en el código de las aplicaciones

bases de datos activas esta evolución es autónoma y se define en el esquema de la base de datos

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

1.- INTRODUCCIÓN A LAS BASES DE DATOS ACTIVAS (continuación)

BDD Activas: son aquellas que tienen funcionalidad adicional para especificar Reglas Activas.

Modelo Evento–Condición–Acción

El (los) evento(s) que provoca(n) la acción:


Operaciones de consulta ó modificación de
datos en la base de datos que se aplican
explícitamente a ella misma. También
eventos temporales u otros tipos de
eventos externos.
La condición: determina si debe ejecutarse
La acción que se tomará: la acción es
la acción de la regla una vez que se ha
normalmente una secuencia de
producido el evento de activación, puede
sentencias SQL, pero también puede
evaluarse una condición opcional
ser una transacción de base de datos o
un programa externo que se ejecutará
automáticamente

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

2.- PROCEDIMIENTOS ALMACENADOS EN EL ESQUEMA

Ó módulos almacenados persistentes, son módulos o programas de BDD (de lenguaje propio) que el
DBMS almacena (persistentemente) y ejecuta en el servidor de BDD

Utilidad:
1.- Si varias aplicaciones necesitan un mismo programa de bases de base de datos
2.- La ejecución de un programa en el servidor puede reducir el coste derivado de
la transferencia y la comunicación de datos entre el cliente y el servidor en ciertas
situaciones.
3.- Estos procedimientos pueden mejorar la potencia de modelado de las vistas al
permitir que los usuarios de bases de datos cuenten con tipos más complejos de
datos derivados. Además, se pueden utilizar esos tipos para comprobar
restricciones más complejas que quedan fuera de la especificación de aserciones y
trigger

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

2.- PROCEDIMIENTOS ALMACENADOS EN EL ESQUEMA (continuación)

CREATE PROCEDURE <nombre del procedimiento>


«parámetros»
<declaraciones locales>
<cuerpo del procedimiento> ;

CREATE FUNCTION <nombre de la función>


«parámetros»
RETURNS <tipo de devolución>
<declaraciones locales>
<cuerpo de la función> ;

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

EJERCICIO SP
Elabore un SP para indicar si un sujeto es APTO o NO para donar sangre según su peso (desde 50 kg es APTO)

CREATE FUNCTION `donante`(`pPeso` DECIMAL(5,2)) -- indicamos el nombre y parámetros


RETURNS VARCHAR(10) -- indicamos tipo de valor a retornar
BEGIN
DECLARE mensaje VARCHAR(10); -- Usamos variable de apoyo para almacenar el mensaje
IF pPeso < 50 THEN -- Evaluamos el parámetro
SET mensaje = 'NO APTO'; -- Asignamos el mensaje
ELSE
SET mensaje = 'APTO'; -- Asignamos el mensaje
END IF;
RETURN mensaje; -- Retornamos el mensaje
END

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

2.- PROCEDIMIENTOS ALMACENADOS EN EL ESQUEMA (continuación)

EJERCICIO SP

Elabore un procedimiento almacenado que permita inscribir a un estudiante, una materia dada por
código (del estudiante se requiere su acceso por cedula).

Ej.: CALL inscribir(123,’MAT-I’), donde 123 es la cedula y ‘MAT-I’ es el código de la materia a inscribir

Nota: el proceso de inscripción sólo implica insertar los valores necesarios en la tabla que relaciona estudiantes y materias

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

EJERCICIO SP
Dada la siguiente estructura, elabore un SP para consultar el “porcentaje de impuesto” a partir del Id de registro
(recuerde validar el resultado):
CREATE TABLE impuestos (id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL ,
porcentaje DECIMAL(6,2) NOT NULL);

INSERT INTO impuestos (nombre,porcentaje) VALUES('IVA 16%',16),('IVA 8%',8)

CREATE FUNCTION porcentaje_impuesto (`pId` INT)


RETURNS DECIMAL(5,2)
BEGIN
DECLARE miporcentaje DECIMAL(6,2);
SELECT porcentaje INTO miporcentaje FROM impuestos WHERE id=pId;
IF miporcentaje IS NULL THEN
RETURN 0;
END IF;
RETURN miporcentaje;
END
BDD II - Versión SEP-2019 Rafael Escalona
UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

3.- DISPARADORES

También llamados –triggers-, forman ahora parte del estándar SQL-99, son porciones de código iniciados
por eventos asociados a cambios en los datos de una entidad de datos (tabla). Estos cambios suelen ser:
INSERT, UPDATE y DELETE, adicionalmente, pueden ejecutar ese código antes ó después de dichos
cambios (BEFORE y AFTER).

En MySQL Se incluyó soporte de triggers a partir de la versión 5.0.2

Palabras clave: OLD y NEW Los INSERT permiten el uso de NEW

Los DELETE sólo permiten el uso de OLD

Los UPDATE permiten el uso de Ambas

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

3.- DISPARADORES (continuación):

Sintaxis

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

3.- DISPARADORES (continuación):

PRACTICA 1

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

3.- DISPARADORES (continuación):

PRACTICA 1 (continuación)

Probamos

BDD II - Versión SEP-2019 Rafael Escalona


UNIDAD III: BASE DE DATOS ACTIVAS Y SQL AVANZADO

PRACTICA 2 TRIGGER
Elabore un trigger en la tabla “productos” de modo que al “insertar registros” se determine el valor del atributo
“total”, es decir, que solo se debe ejecutar el insert sobre las columnas
“nombre,precio,cantidad,tiene_iva,idimpuestos”.
DELIMITER $$
CREATE TRIGGER insert_producto
BEFORE
INSERT
ON productos
FOR EACH ROW
BEGIN
DECLARE miporcentaje DECIMAL(6,2);
SELECT porcentaje_impuesto(NEW.idimpuestos) INTO miporcentaje;
IF NEW.tiene_impuesto='S' THEN
SET NEW.total = NEW.precio*NEW.cantidad + NEW.precio*NEW.cantidad*miporcentaje/100;
ELSE
SET NEW.total = NEW.cantidad*NEW.precio;
END IF;
END
$$

BDD II - Versión SEP-2019 Rafael Escalona

Você também pode gostar