Introducción a los procedimientos almacenados
Un procedimiento almacenado es un conjunto de sentencias SQL que se guarda en el servidor de base de datos y se ejecuta con una sola llamada. Los procedimientos pueden recibir parámetros, usar variables, condicionales, bucles y devolver resultados.
¿Qué es un procedimiento almacenado?
Un procedimiento almacenado es como una función que vive dentro de MySQL. En lugar de enviar varias sentencias SQL desde tu aplicación, encapsulas la lógica en un procedimiento y lo llamas por su nombre:
-- Sin procedimiento: múltiples consultas desde la aplicación
SELECT * FROM productos WHERE categoria_id = 6;
SELECT AVG(precio) FROM productos WHERE categoria_id = 6;
SELECT COUNT(*) FROM productos WHERE categoria_id = 6;
-- Con procedimiento: una sola llamada
CALL resumen_categoria(6);Primer ejemplo
DELIMITER //
CREATE PROCEDURE contar_productos()
BEGIN
SELECT COUNT(*) AS total_productos FROM productos;
END //
DELIMITER ;CALL contar_productos();| total_productos |
|---|
| 30 |
Ventajas
| Ventaja | Descripción |
|---|---|
| Reducción de tráfico de red | Se envía solo CALL nombre() en lugar de múltiples sentencias |
| Reutilización | El mismo procedimiento se puede llamar desde diferentes aplicaciones |
| Seguridad | Los usuarios pueden ejecutar procedimientos sin acceso directo a las tablas |
| Mantenimiento centralizado | La lógica de negocio se modifica en un solo lugar |
| Rendimiento | MySQL puede cachear el plan de ejecución |
Desventajas
| Desventaja | Descripción |
|---|---|
| Depuración difícil | MySQL no ofrece herramientas avanzadas de debugging |
| Portabilidad limitada | La sintaxis varía entre motores de base de datos |
| Consumo de recursos | La lógica compleja consume memoria y CPU del servidor |
| Control de versiones | Es más difícil versionar procedimientos que código de aplicación |
Ver procedimientos existentes
-- Listar procedimientos de la base de datos actual
SHOW PROCEDURE STATUS WHERE Db = 'tienda_mysql';-- Ver la definición de un procedimiento
SHOW CREATE PROCEDURE contar_productos\GLimpieza
DROP PROCEDURE IF EXISTS contar_productos;En el siguiente artículo veremos el comando DELIMITER, necesario para definir procedimientos almacenados en el cliente MySQL.
Escrito por Eduardo Lázaro
