Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenido
1 Ideograma ............................................................................................................................................. 3
2. Automatización de tareas: Procedimientos Almacenados y Triggers............................................... 4
2.1 Definición ............................................................................................................................................. 4
2.2 Sintaxis de los procedimientos almacenados ................................................................................... 5
2.3 Sentencia IF ............................................................................................................................................. 9
2.4 Sentencia CASE...................................................................................................................................... 13
2.5 Sentencia LOOP..................................................................................................................................... 14
2.6 Sentencia REPEAT ................................................................................................................................. 15
2.7 Sentencia WHILE ................................................................................................................................... 15
2.8 ALTER PROCEDURE y ALTER FUNCTION ................................................................................................. 15
3. Disparadores Triggers....................................................................................................................... 16
3.1 Creación de un Trigger ..................................................................................................................... 16
3.2 Eliminación de Triggers – DROP TRIGGER .......................................................................................... 18
3.3 Utilización de disparadores Triggers .................................................................................................. 18
5 Actividades ..................................................................................................................................... 19
5.1 Taller 2 .................................................................................................................................................. 20
Bibliografía .................................................................................................................................................. 21
3
1 ideograma
Procedimientos
almacenados
Procedimientos
almacenados y
triggers
Triggers
Optimización
4
2.1 Definición
Los procedimientos almacenados son de gran utilidad para realizar labores de gestión
de las bases de datos, permitiendo programar actividades periódicas, facilitando labores
para el adecuado manejo de los datos, realizar actividades de mantenimiento y
prevención, revisión de políticas de seguridad, entre otras.
Automatizar es una de las labores clave para realizar una buena administración de los
Sistemas gestores de Bases de Datos. En general los DBMS más importantes tanto
libres como comerciales, cuentan con herramientas para automatizar tareas y en general
hacen uso de rutinas entre las que se cuentan procedimientos almacenados, funciones,
disparadores o triggers, así como con Interfaces de programación de aplicaciones – API,
de diferentes lenguajes de programación orientados a la web tal como Python, PHP, o
PERL.
Algunos de los usos más destacados de los procedimientos almacenados son los
siguientes:
también.
reads SQL Data | Modifies SQL Data: indica si modifica o no los datos.
SQL Security: determina si debe ejecutarse con permisos del creador (definer) o del
que invoca (invoker).
En este caso se utiliza la sentencia DROP PROCEDURE con el fin de borrar si existe
alguna instancia del procedimiento antes de realizar la creación. Para realizar el llamado
del procedimiento creado utilizamos el siguiente comando
CALL test.procedimientosimple(@a);
8
delimiter //
DROP FUNCTION IF EXISTS test.holaMundo//
CREATE FUNCTION test.holaMundo (palabra CHAR(20)) RETURNS CHAR(50)
RETURN CONCAT('Hola, ',palabra,'!');
//
delimiter ;
El siguiente ejemplo muestra el uso de otras clausulas como LANGUAGE que se utiliza
para indicar el lenguaje en el que se ejecutará el procedimiento, y NOT DETERMINISTIC
que indica que el procedimiento no siempre retorna el mismo valor, así mismo la cláusula
COMMENT que permite documentar los procedimientos creados:
delimiter //
DROP PROCEDURE IF EXISTS test.fecha//
CREATE PROCEDURE test.fecha()
LANGUAGE SQL
9
NOT DETERMINISTIC
COMMENT 'Procedimiento para saber la fecha y un número aleatorio'
SELECT CURRENT_DATE, RAND() //
2.3 Sentencia IF
delimiter //
DROP FUNCTION IF EXISTS test.estado//
CREATE FUNCTION test.estado(in_estado char(1))
RETURNS VARCHAR (20)
COMMENT 'Procedimiento para establecer el estado dado un parámetro
ingresado'
BEGIN
DECLARE estado VARCHAR (20);
IF in_estado = 'P' THEN
SET estado = 'Pendiente';
ELSEIF in_estado = 'C' THEN
SET estado = 'Cancelado';
ELSEIF in_estado = 'A' THEN
SET estado = 'Activo';
END IF;
RETURN (estado);
END; //
delimiter ;
La anterior función puede ser llamada con una sentencia SELECT con lo cual se obtendrá
el siguiente resultado:
SELECT test.estado('C');
+--------------------------+
| test.estado('C') |
+--------------------------+
| Cancelado |
+--------------------------+
El siguiente ejemplo realizaremos una serie de funciones con el fin de llamarlas desde
otras funciones utilizando clausulas IF. Empezamos con la función espar con la cual
11
definiremos si un número dado es par o no.
delimiter //
DROP FUNCTION IF EXISTS test.espar//
CREATE FUNCTION test.espar ( numero INT)
RETURNS INT
BEGIN
DECLARE par INT;
IF MOD(numero, 2)=0 THEN
SET par = TRUE;
ELSE SET par= FALSE;
END IF;
RETURN (par);
END; //
12
delimiter //
DROP PROCEDURE IF EXISTS test.paroimpar //
CREATE PROCEDURE test.paroimpar (in numero INT)
BEGIN
IF (espar(numero)) THEN
SELECT CONCAT("El número: ", numero, "es par");
ELSE SELECT CONCAT("El número: ", numero, " es impar");
END IF;
END; //
delimiter ;
Este procedimiento puede ser llamado por la siguiente sentencia, en donde se le pasa
como parámetro un número, como se muestra a continuación:
CALL test.paroimpar(1234);
+----------------------------------------+
| CONCAT("El número: ", numero, "es par")|
+----------------------------------------+
| El número: 1234 es par |
+----------------------------------------+
Este es un ejemplo sencillo de cómo las funciones pueden reducir la complejidad del
código, al encapsular sentencias que pueden ser reutilizadas según las necesidades del
desarrollador, permitiendo también que el código sea mucho más legible.
13
El comando CASE evalúa casos, si una condición dada es verdadera el comando SQL
correspondiente se ejecuta. Si no coincide ninguna condición se ejecutarán los
comandos SQL que se encuentren en la cláusula ELSE. A continuación un ejemplo que
muestra el uso de CASE
delimiter //
DROP PROCEDURE IF EXISTS test.notas//
CREATE PROCEDURE test.notas (in numero FLOAT)
BEGIN
CASE
WHEN numero<3 THEN
SELECT CONCAT("Perdió: ", numero);
WHEN 3 <= numero && numero < 4 THEN
SELECT CONCAT("Aprobó: ", numero);
ELSE
SELECT CONCAT("Sobresaliente: ", numero);
END CASE;
END; //
14
La sentencia LOOP realiza un ciclo que permite la ejecución repetida de comandos SQL,
que se repiten hasta que finaliza el ciclo, usualmente con un comando LEAVE.
Para el ejemplo crearemos una tabla de prueba en la Base de Datos test con el siguiente
comando
CREATE TABLE test.prueba (id INT)
Este procedimiento insertará valores desde cero hasta el número que se pase como
parámetro.
[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]
La sentencia REPEAT permite ejecutar los comandos SQL hasta que la condición
search_condition se cumpla
Los comandos que se encuentren dentro de una sentencia WHILE se repetiran mientras
la condición search_condition sea cierta. Para el siguiente ejemplo utilizaremos la tabla
prueba2 en la base de datos test, creada bajo el siguiente script
3. Disparadores Triggers
Un disparador o trigger es un objeto dentro de una base de datos que se asocia con una
tabla y se activa cuando ocurre un evento en particular dentro de la tabla. Es un tipo
especial de procedimiento almacenado y tiene una gran utilidad ya que permite mantener
por ejemplo la integridad de los datos, desarrollar rutinas para el mantenimiento, entre
otras. La siguiente es la sintaxis para la creación de un trigger:
Según el manual de referencia de MySQL 5.0 estas son las referencias a tener en cuenta
para la ejecución de la sentencia:
▪ nombre_disp: Nombre del trigger puede esr BEFORE para indicar que el
disparador se ejecutará antes o AFTER para indicar que se ejecutará después de la
sentencia que lo activa.
▪ momento_disp: es el momento en que el disparador entra en acción. Puede ser
BEFORE (antes) o AFTER (después), para indicar que el disparador se ejecute
antes o después que la sentencia que lo activa.
▪ evento_disp: indica la clase de sentencia que activa al disparador. Puede ser
INSERT, UPDATE, o DELETE. Por ejemplo, un disparador BEFORE para
sentencias INSERT podría utilizarse para validar los valores a inserta.
17
Hay que tener en cuenta que no puede haber dos disparadores en una misma tabla que
correspondan al mismo momento. Por ejemplo, no se pueden tener dos disparadores
BEFORE UPDATE. Pero sí es posible tener los disparadores BEFORE UPDATE y
BEFORE INSERT o BEFORE UPDATE y AFTER UPDATE.
Para mostrar el uso de los triggers realizaremos un ejemplo que muestre en la práctica
cómo funcionan. Realizaremos la inserción en una tabla y crearemos un disparador para
para sentencias INSERT dentro de la tabla que inserte si la inserción fue realizada
correctamente en otra tabla. El script sería de la siguiente forma:
DELIMITER //
CREATE TRIGGER test.trigger1 AFTER INSERT ON test.prueba1
FOR EACH ROW BEGIN
INSERT INTO prueba2 SET a2 = CONCAT("Se insertó correctamente el
valor ", NEW.a1, " en la tabla prueba1");
END
//
DELIMITER ;
a2
Se insertó correctamente el valor 1 en la tabla prueba1
Se insertó correctamente el valor 2 en la tabla prueba1
Se insertó correctamente el valor 3 en la tabla prueba1
La sentencia DROP TRIGGER necesita que se posea el privilegio SUPER. Para eliminar
el Trigger creado para el ejemplo anterior el comando que se necesita es el siguiente:
Como los triggers están asociados con una tabla en particular, no se pueden tener
múltiples triggers con el mismo nombre en la misma tabla. Para una mejor compatibilidad
con desarrollos futuros, se debe intentar emplear nombres de disparadores que no se
repitan dentro de la base de datos, ya que pueden generar problemas.
Adicionalmente al requisito de nombres únicos de disparador en cada tabla, hay otras
limitaciones como que un trigger no puede invocar procedimientos almacenados
utilizando la sentencia CALL, o que no se pueden utilizar sentencias que inicien o
19
5 Actividades
5.1 Taller 2
Elaborar un script que permita la creación en la base de datos las tablas
blog(id_blog, fecha, autor, titulo, contenido) y notificación(id, id_blog, fecha,
notificación). Realizar un procedimiento almacenado tal que una vez se inserte
una nueva entrada en la tabla blog, registre en la tabla notificación que se ha
ingresado a nueva entrada.
Crear un trigger que elimine el registro correspondiente a la tabla blog una vez se
borre el registro de la tabla notificación.
21
Bibliografía
• Martínez López, F. J. y Gallegos Ruiz, A. (2017). Programación de bases de datos
relacionales. RA-MA Editorial. https://elibro-
net.proxy.umb.edu.co/es/lc/biblioumb/titulos/106525 (Recuperado Base de Datos new
elibro)
• Arenal Laza, C. (2020). Sistemas de información y bases de datos en consumo. UF1755.
Editorial Tutor Formación. https://elibro-
net.proxy.umb.edu.co/es/lc/biblioumb/titulos/125939 (Recuperado Base de Datos new
elibro)
• Pulido Romero, E. Escobar Domínguez, Ó. y Núñez Pérez, J. Á. (2019). Base de datos. Grupo
Editorial Patria. https://elibro-net.proxy.umb.edu.co/es/lc/biblioumb/titulos/121283
(Recuperado Base de Datos new elibro)
• A review of different approaches in natural language interfaces to databases. (2017).
(Recuperado Base de Datos IEEE Xplore)
• Kumar, K., & Azad, S. K. (2017). Relational Database Normalization under Tabular
Approach: A Design Methodology. International Journal Of Advanced Research In
Computer Science, 8(5), 2160-2164. (Recuperado Base de Datos EBSCO)
• Capacho, P. J. R., & Nieto, B. W. (2017). Diseño de base de datos. (Recuperado eBook
Collection - (EBSCOhost)
• Somenzi, D. M. (2017). Database Normalization and a Case Study. (Recuperado Base de
Datos EBSCO)
• Database normalization design pattern. (2017). (Recuperado Base de Datos IEEE Xplore)
• Sudhindaran, D. S. (2017). Generating a Normalized Database Using Class Normalization.
(2017). United States, North America: UNF
• Sarasa, A. (2016). Introducción a las bases de datos NoSQL usando MongoDB. Editorial UOC.
https://elibro-net.proxy.umb.edu.co/es/lc/biblioumb/titulos/58524 (Recuperado Base de
Datos new elibro)