Procedimientos Almacenados
Un procedimiento almacenado es un conjunto de sentencias SQL que se
guardan en una base de datos y pueden ser ejecutadas en cualquier momento.
Son similares a las funciones en la programación convencional y ayudan a
automatizar tareas repetitivas, mejorar el rendimiento y reducir la cantidad de
datos transferidos entre la aplicación y la base de datos.
Sintaxis:
La sintaxis básica para crear un procedimiento almacenado en MySQL es la
siguiente:
Como un procedimiento almacenado puede tener muchos comandos SQL entre
las palabras claves begin y end debemos informar de alguna manera a MySQL
que no ejecute dichos comandos. Para ello utilizamos el comando 'delimiter'
cambiando el caracter ';' como fin de instrucción.
Utilizamos el delimitador '//' como podría ser cualquier otro, por ejemplo '$'.
DELIMITER //
CREATE PROCEDURE nombre_del_procedimiento (parámetros)
BEGIN
-- Código SQL aquí
END //
DELIMITER ;
DELIMITER: Cambia el delimitador de MySQL para permitir que el
procedimiento se ejecute sin problemas. Por defecto, el delimitador es punto y
coma (;).
CREATE PROCEDURE: Crea el procedimiento almacenado con el nombre
indicado.
parámetros: Se pueden definir parámetros de entrada (IN), de salida (OUT) o
ambos (INOUT).
BEGIN ... END: Encierra el conjunto de instrucciones SQL que constituyen el
cuerpo del procedimiento.
Ejemplos:
Procedimientos Almacenados
1. Este procedimiento calcula el precio total de una orden en base
a un descuento y muestra el resultado:
DELIMITER //
CREATE PROCEDURE calcular_total(IN precio DECIMAL(10,2), IN descuento
DECIMAL(5,2), OUT total DECIMAL(10,2))
BEGIN
SET total = precio - (precio * descuento / 100);
END //
DELIMITER ;
IN precio: Precio base de un producto.
IN descuento: Descuento aplicado en porcentaje.
OUT total: Precio final calculado con el descuento.
Para llamar el procedimiento:
CALL calcular_total(100.00, 10, @resultado);
SELECT @resultado;
2. Este procedimiento obtiene el nombre completo de un cliente a
partir de su ID y lo almacena en un parámetro de salida.
DELIMITER //
CREATE PROCEDURE obtener_nombre_cliente(IN cliente_id INT, OUT
nombre_completo VARCHAR(100))
BEGIN
SELECT CONCAT(nombre, ' ', apellido) INTO nombre_completo
FROM clientes
WHERE id = cliente_id;
END //
DELIMITER ;
Para llamar el procedimiento:
Procedimientos Almacenados
CALL obtener_nombre_cliente(1, @nombre);
SELECT @nombre;
3. Este procedimiento calcula el factorial de un número dado
utilizando un bucle WHILE.
DELIMITER //
CREATE PROCEDURE calcular_factorial(IN numero INT, OUT resultado BIGINT)
BEGIN
DECLARE i INT DEFAULT 1;
SET resultado = 1;
WHILE i <= numero DO
SET resultado = resultado * i;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
Para llamar el procedimiento:
CALL calcular_factorial(5, @resultado);
SELECT @resultado;
4. Este procedimiento verifica si un usuario existe en una tabla de
usuarios y devuelve un mensaje indicando si el usuario está
registrado.
DELIMITER //
CREATE PROCEDURE verificar_usuario(IN usuario_nombre VARCHAR(50), OUT
mensaje VARCHAR(50))
BEGIN
Procedimientos Almacenados
DECLARE existe INT;
SELECT COUNT(*) INTO existe FROM usuarios WHERE nombre =
usuario_nombre;
IF existe > 0 THEN
SET mensaje = 'Usuario encontrado';
ELSE
SET mensaje = 'Usuario no encontrado';
END IF;
END //
DELIMITER ;
Para llamar el procedimiento:
CALL verificar_usuario('juan', @mensaje);
SELECT @mensaje;
Referencias bibliográficas:
Hernández, J. J. S. (n.d.). Unidad 12. Triggers, procedimientos y funciones
en MySQL.
[Link]
tos
Temario:Procedimientos almacenados (crear - ejecutar). (n.d.).
[Link]
[Link]?cod=102
Dyson, X., & Dyson, X. (2021, April 16). Cómo crear y usar
procedimientos almacenados en MySQL | Cable Naranja. Cable Naranja.
[Link]
almacenados-en-mysql/