Las Stored Procedures (procedimientos almacenados) en MariaDB son bloques de código SQL que se almacenan en el servidor de la base de datos y se pueden reutilizar para realizar tareas específicas. Son útiles para encapsular lógica compleja, mejorar el rendimiento y garantizar la consistencia del código.
Una Stored Procedure es un conjunto de instrucciones SQL que se ejecuta como una unidad. Puede aceptar parámetros de entrada y salida, realizar operaciones como consultas, inserciones, actualizaciones o eliminaciones, y devolver resultados.
1. Reutilización del código: Una vez creada, puedes llamarla múltiples veces.
2. Rendimiento optimizado: Reduce el tráfico entre la aplicación y la base de datos.
3. Seguridad: Restringe el acceso directo a las tablas.
4. Mantenibilidad: Centraliza la lógica de negocio en la base de datos.
DELIMITER //
CREATE PROCEDURE nombre_procedimiento ([parámetros])
BEGIN
-- Cuerpo del procedimiento
END;
//
DELIMITER ;
Elemento | Descripción |
---|---|
DELIMITER
|
Cambia el delimitador para evitar conflictos con los puntos y comas (; ).
|
CREATE PROCEDURE
|
Define el procedimiento almacenado. |
BEGIN...END
|
Delimita el bloque de código del procedimiento. |
1. IN: Parámetro de entrada. Solo puede recibir datos.
2. OUT: Parámetro de salida. Devuelve un valor al final del procedimiento.
3. INOUT: Parámetro que puede recibir y devolver datos.
CREATE PROCEDURE ejemplo_procedimiento(
IN parametro_entrada INT,
OUT parametro_salida INT
)
BEGIN
SET parametro_salida = parametro_entrada * 2;
END;
Esta Stored Procedure lista todos los registros de una tabla llamada productos
:
DELIMITER //
CREATE PROCEDURE listar_productos()
BEGIN
SELECT * FROM productos;
END;
//
DELIMITER ;
Llamar al procedimiento:
CALL listar_productos();
Este procedimiento busca productos por categoría:
DELIMITER //
CREATE PROCEDURE buscar_productos_por_categoria(IN categoria VARCHAR(50))
BEGIN
SELECT * FROM productos WHERE categoria = categoria;
END;
//
DELIMITER ;
Llamar al procedimiento:
CALL buscar_productos_por_categoria('Electrónica');
Este procedimiento calcula el precio con descuento:
DELIMITER //
CREATE PROCEDURE calcular_descuento(
IN precio_base DECIMAL(10,2),
IN descuento_porcentaje DECIMAL(5,2),
OUT precio_final DECIMAL(10,2)
)
BEGIN
SET precio_final = precio_base - (precio_base * descuento_porcentaje / 100);
END;
//
DELIMITER ;
Llamar al procedimiento:
CALL calcular_descuento(100, 10, @resultado);
SELECT @resultado AS precio_final;
Este procedimiento evalúa si un producto está disponible en el inventario:
DELIMITER //
CREATE PROCEDURE verificar_inventario(
IN id_producto INT,
OUT mensaje VARCHAR(100)
)
BEGIN
DECLARE stock INT;
SELECT cantidad INTO stock FROM inventario WHERE producto_id = id_producto;
IF stock > 0 THEN
SET mensaje = 'Producto disponible';
ELSE
SET mensaje = 'Producto agotado';
END IF;
END;
//
DELIMITER ;
Llamar al procedimiento:
CALL verificar_inventario(1, @estado);
SELECT @estado AS estado_producto;
Para eliminar un procedimiento almacenado, usa:
DROP PROCEDURE IF EXISTS nombre_procedimiento;
1. Seguridad: Las Stored Procedures pueden restringir el acceso directo a las tablas, pero asegúrate de gestionar permisos correctamente.
2. Optimización: Aunque son rápidas, evita incluir lógica compleja que pueda ser más eficiente en el lado de la aplicación.
3. Depuración: Usa mensajes con SELECT
o SIGNAL
para depurar errores en procedimientos largos.
Consulta la documentación oficial de MariaDB sobre Stored Procedures para más detalles y configuraciones avanzadas.
Jorge García
Fullstack developer