ANALISIS Y DESARROLLO DE SISTEMAS DE INFORMACION
Ing. Katherine Blanco Cuentas
Procedimientos almacenados
Un procedimiento almacenado es
un conjunto de comandos SQL que
pueden almacenarse en el servidor.
Los procedimientos almacenados
son subprogramas que ejecutan una
acción específica y no devuelven
ningún valor.
Ventajas de los Procedimientos almacenados
Cuando múltiples aplicaciones cliente se escriben en distintos lenguajes o
funcionan en distintas plataformas, pero necesitan realizar la misma
operación en la base de datos.
Brinda un entorno seguro y consistente al momento de acceder a los
datos.
Los procedimientos almacenados pueden mejorar el rendimiento ya que
se necesita enviar menos información entre el servidor y el cliente.
Cálculos y operaciones complejas en la base de datos.
Generación de informes y reportes.
Mantenimiento de datos en cascada.
Estructura de un procedimiento almacenado
Algunas de las palabras reservadas a utilizar en la construcción del
procedimiento almacenado pueden ser:
• IN: Indica que el parámetro será de entrada.
• OUT: Indica que el parámetro será de salida.
• INTOUT: Indica que el parámetro será tanto de Entrada como de salida.
• BEGIN: Limitador del procedimiento.
• END: Fin de nuestro procedimiento.
• DELIMITER: Restablece el punto y coma como delimitador.
• CALL: para llamar al procedimiento una vez creado.
Se utilizará la base de datos del consultorio médico tratada en materiales
anteriores.
ESTRUCTURAS DE PROGRAMACIÓN EN
PROCEDIMIENTOS ALMACENADOS
Declaración de Variables y Asignación
Las variables en procedimientos almacenados son similares a las variables en la
programación convencional. Se definen con un nombre y un tipo de dato.
Ejemplo:
DECLARE variable1 INT;
DECLARE variable2 VARCHAR(50);
Asignación de Valores:
Las variables pueden ser inicializadas con valores o actualizadas en el procedimiento.
Ejemplo:
SET variable1 = 10;
SET variable2 = 'Ejemplo';
Estructura de control SI
IF condición THEN DELIMITER //
-- Código a ejecutar si la CREATE PROCEDURE pa_mayor(
condición es verdadera IN valor1 INT,
ELSE IN valor2 INT)
-- Código a ejecutar si la BEGIN
condición es falsa IF valor1>valor2 THEN
END IF; SELECT valor1;
ELSE
SELECT valor2;
Actividad de Participación. END IF;
Realiza un procedimiento END //
almacenado que muestre si un DELIMITER ;
numero es positivo o no
CALL pa_mayor(20, 400);
Estructura de control CASE
CASE VARIABLE
WHEN CASO1 THEN RETURN INSTRUCCIONES;
WHEN CASO2 THEN RETURN INSTRUCCIONES;
WHEN CASO3 THEN RETURN INSTRUCCIONES;
ELSE
RETURN INSTRUCCIONES;
END CASE;
Estructura de control FOR
DELIMITER //
FOR variable IN CREATE PROCEDURE ForLoopExample()
valor_inicial..valor_final DO BEGIN
-- Código a ejecutar en cada iteración DECLARE counter INT;
END FOR;
FOR counter = 1 TO 5 DO
SELECT counter;
END FOR;
END;
//
DELIMITER ;
Estructura de control WHILE
WHILE condición DO
-- Código a ejecutar en cada iteración
END WHILE;
Estructura de control REPEAT
REPEAT
-- Código a ejecutar en cada iteración
UNTIL condición;
Funciones en MySQL
Una función en MySQL es una conjunto de instrucciones
diseñadas para cumplir un objetivo especifico,
retornando siempre un resultado.
Se diferencian de los procedimientos en las siguientes características:
Solamente pueden tener parámetros de entrada IN y no parámetros de salida
OUT o INOUT
Deben retornar en un valor con algún tipo de dato definido
Pueden usarse en el contexto de una sentencia SQL
Solo retornan un valor individual, no un conjunto de registros.
Sintaxis Funciones en MySQL
Ejemplo Funciones en MySQL
Crear la siguiente Función en MySQL
Triggers
Los Triggers, también conocidos como disparadores o
desencadenadores, son subrutinas que se ejecutan de
manera automática, cuando sucede algún evento
sobre las tablas asociadas a la base de datos.
Los eventos que activan un triggers pueden ser las sentencias INSERT, DELETE,
UPDATE que pueden modifican los datos de una tabla.
Los triggers se pueden ejecutar antes (BEFORE) y/o después (AFTER) de que sean
modificados los datos.
Sintaxis Triggers en MySQL
DELIMITER $$
CREATE TRIGGER nombreTrigger
BEFORE/AFTER
INSERT/UPDATE/DELETE
ON nombretabla
FOR EACH ROW
BEGIN
<bloque_de_instrucciones>
END$$
DELIMITER ;
Identificadores NEW y OLD en Triggers
OLD indica el valor antiguo de la columna y NEW el valor nuevo que pudiese
tomar
Si usamos la sentencia UPDATE podremos referirnos a un valor OLD y NEW, ya que
modificaremos registros existentes por nuevos valores.
En cambio si usamos INSERT solo usaremos NEW, ya que su naturaleza es
únicamente de insertar nuevos valores a las columnas.
Y si usamos DELETE usaremos OLD debido a que borraremos valores que existen
con anterioridad.
Sintaxis Triggers en MySQL
¿Para que sirven los Triggers?
Mantener una copia actualizada de los clientes que ingresen a una tienda online.
Realizar un pedido de un producto, cuando el stock en el almacén llegue a una
cantidad determinada.
Llevar un registro de las acciones realizadas por cada usuario sobre una base de
datos.
Generar de manera automática cálculos sobre una o varias columnas.
Evitar la entrada de datos inválidos o transacciones no permitidas.
Realizar auditorías sobre las actividades de los usuarios.
Sincronizar tablas que duplican información.
Llevar estadísticas sobre el acceso a la base de datos.
Visualizar determinados eventos o generar alertas cuando se generen ciertas
acciones en la base de datos.
Cuidados de los Triggers
Debemos tener mucho cuidado con que un TRIGGER no ejecute a otro y este a
su vez al anterior. Sería un bucle infinito de ejecución.
Si tenemos varios disparadores en el mismo evento y en la misma tabla. Seria
un mantenimiento engorroso.
Si el Triggers desencadena un error, no podrá ejecutarse el evento.
OLD no es accesible en los registros de un INSERT.
NEW no está disponible en los registros de un DELETE.
TALLER TRIGGERS