Un procedimiento almacenado es un bloque de instrucciones SQL guardado dentro de MySQL para poder ejecutarlo cuando sea necesario.
¿Dónde vive un procedimiento almacenado?
El procedimiento se guarda dentro del servidor MySQL, no dentro del código PHP, JavaScript o Python de la aplicación.
Esto permite que distintas aplicaciones puedan invocar la misma operación, aunque también significa que parte de la lógica queda fuera del repositorio de código si no se versiona adecuadamente.
¿Qué problema resuelve?
Si una misma operación SQL compleja se repite en distintos lugares, un procedimiento permite centralizarla y reutilizarla.
También puede agrupar varias sentencias, recibir parámetros, usar variables, tomar decisiones y devolver resultados.
Primer procedimiento
DELIMITER // CREATE PROCEDURE listar_alumnos() BEGIN SELECT * FROM alumnos; END // DELIMITER ;
¿Qué significa DELIMITER?
MySQL usa normalmente el punto y coma para terminar una sentencia. Como dentro de un procedimiento hay varios puntos y coma, cambiamos temporalmente el delimitador.
BEGIN y END
Marcan el inicio y el final del bloque de instrucciones.
Crear no significa ejecutar
CREATE PROCEDURE registra el procedimiento en MySQL. Su contenido no se ejecuta en ese momento.
La ejecución ocurre cuando lo invocamos con CALL.
CALL
Un procedimiento se ejecuta con CALL.
CALL listar_alumnos();
Parámetros: entrada y salida
Los parámetros permiten que un mismo procedimiento trabaje con distintos valores sin tener que reescribirlo.
IN: entra un valor;OUT: sale un valor;INOUT: entra y puede salir modificado.
Parámetros IN
Los parámetros IN reciben valores desde afuera.
DELIMITER // CREATE PROCEDURE alumnos_por_edad( IN p_edad INT ) BEGIN SELECT nombre, apellido, edad FROM alumnos WHERE edad = p_edad; END // DELIMITER ;
Lo ejecutamos así:
CALL alumnos_por_edad(25);
Parámetros OUT
Un parámetro OUT permite devolver un valor.
DELIMITER // CREATE PROCEDURE contar_alumnos( OUT p_total INT ) BEGIN SELECT COUNT(*) INTO p_total FROM alumnos; END // DELIMITER ;
CALL contar_alumnos(@total); SELECT @total;
INOUT
INOUT recibe un valor y también puede devolverlo modificado.
CREATE PROCEDURE incrementar(INOUT p_numero INT) BEGIN SET p_numero = p_numero + 1; END
Parámetros y variables no son lo mismo
Un parámetro conecta el procedimiento con quien lo llama. Una variable local existe solo mientras el procedimiento se está ejecutando.
Variables locales
Se crean con DECLARE.
DECLARE v_promedio DECIMAL(10,2);
SELECT … INTO
Permite guardar el resultado de una consulta en una variable.
SELECT AVG(edad) INTO v_promedio FROM alumnos;
IF, ELSEIF y ELSE
Los procedimientos pueden tomar decisiones.
IF p_nota >= 8 THEN SET v_estado = 'Promocionado'; ELSEIF p_nota >= 6 THEN SET v_estado = 'Aprobado'; ELSE SET v_estado = 'Desaprobado'; END IF;
Procedimiento con INSERT
CREATE PROCEDURE crear_alumno( IN p_nombre VARCHAR(100), IN p_apellido VARCHAR(100), IN p_edad INT ) BEGIN INSERT INTO alumnos(nombre, apellido, edad) VALUES(p_nombre, p_apellido, p_edad); END
Procedimientos con varias operaciones
Un procedimiento puede insertar una cabecera, crear detalles, actualizar stock y validar condiciones. Cuando esas acciones forman una sola operación de negocio, normalmente conviene combinarlas con una transacción.
Procedimientos y transacciones
Un procedimiento puede formar parte de una transacción cuando varias operaciones deben ejecutarse juntas.
Eliminar procedimiento
DROP PROCEDURE IF EXISTS listar_alumnos;
Ver procedimientos existentes
SHOW PROCEDURE STATUS;
Procedimientos vs lógica de aplicación
No toda lógica debe ir a la base. Los procedimientos son útiles para operaciones fuertemente relacionadas con datos o reutilizadas por distintos sistemas.
Una desventaja es que la lógica queda más repartida: parte en la aplicación y parte en MySQL. En proyectos grandes eso puede dificultar pruebas, despliegues y mantenimiento si no existe una estrategia clara.
Errores comunes
- olvidar DELIMITER;
- confundir IN, OUT e INOUT;
- crear procedimientos demasiado grandes;
- duplicar lógica que ya existe en la aplicación;
- no validar parámetros.
Ejercicios
- listar productos;
- buscar por categoría;
- crear producto;
- actualizar precio;
- devolver cantidad mediante OUT.
¿Qué sigue?
Funciones almacenadas.
¿Te sirvió esta guía? ☕
Si este contenido te ayudó y querés apoyar a Club Programador para seguir publicando ejercicios, proyectos y guías gratuitas, podés colaborar mediante:
Ruta SQL / MySQL
Ver todos los contenidos de SQL / MySQL
Descubre más desde Club Programador
Suscríbete y recibe las últimas entradas en tu correo electrónico.
2 opiniones en “Procedimientos almacenados en MySQL: CREATE PROCEDURE, parámetros y ejemplos prácticos”