🧠 Curso: Stored Procedures en MySQL
📌 Módulo 1: ¿Qué es un Stored Procedure?
Objetivo: Comprender el concepto y ventajas de los procedimientos almacenados.
- Son bloques de código SQL que se almacenan y ejecutan en el servidor.
- Permiten encapsular lógica compleja, mejorar rendimiento y seguridad.
- Se invocan con
CALL nombre_procedimiento()
.
🧱 Módulo 2: Sintaxis básica
Objetivo: Crear y ejecutar procedimientos simples.
DELIMITER //
CREATE PROCEDURE saludo()
BEGIN
SELECT 'Hola desde MySQL';
END //
DELIMITER ;
CALL saludo();
Usamos DELIMITER
para definir el bloque completo.
🔢 Módulo 3: Parámetros IN, OUT e INOUT
Objetivo: Usar parámetros para entrada y salida de datos.
CREATE PROCEDURE obtener_precio(IN producto_id INT, OUT precio DECIMAL(10,2))
BEGIN
SELECT precio INTO precio FROM productos WHERE id = producto_id;
END;
IN: entrada | OUT: salida | INOUT: entrada y salida
🔁 Módulo 4: Estructuras de control
Objetivo: Usar condicionales y bucles dentro del procedimiento.
CREATE PROCEDURE verificar_stock(IN cantidad INT)
BEGIN
IF cantidad > 0 THEN
SELECT 'Stock disponible';
ELSE
SELECT 'Sin stock';
END IF;
END;
También podés usar WHILE
, REPEAT
y CASE
.
📦 Módulo 5: Variables locales y SELECT INTO
Objetivo: Declarar variables internas y almacenar resultados.
CREATE PROCEDURE resumen_producto(IN producto_id INT)
BEGIN
DECLARE nombre VARCHAR(100);
DECLARE precio DECIMAL(10,2);
SELECT nombre, precio INTO nombre, precio
FROM productos WHERE id = producto_id;
SELECT CONCAT(nombre, ' cuesta $', precio);
END;
🧨 Módulo 6: Manejo de errores con HANDLER
Objetivo: Capturar errores y evitar interrupciones.
CREATE PROCEDURE buscar_producto(IN producto_id INT)
BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND
SELECT 'Producto no encontrado';
SELECT nombre FROM productos WHERE id = producto_id;
END;
Tipos: CONTINUE
, EXIT
, UNDO
🔗 Módulo 7: Procedimientos con cursores
Objetivo: Recorrer múltiples filas con un cursor.
CREATE PROCEDURE listar_productos()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE nombre VARCHAR(100);
DECLARE cur CURSOR FOR SELECT nombre FROM productos;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO nombre;
IF done THEN
LEAVE read_loop;
END IF;
SELECT nombre;
END LOOP;
CLOSE cur;
END;
🧪 Módulo final: Proyecto avanzado
Objetivo: Aplicar todo lo aprendido en una solución real.
- Crear procedimientos para registrar pedidos, actualizar stock y generar reportes.
- Usar parámetros, cursores y manejo de errores.
- Integrar con una app web o backend en Node.js, PHP o Python.