Procedimientos almacenados en MySQL: CREATE PROCEDURE, parámetros y ejemplos prácticos


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

  1. listar productos;
  2. buscar por categoría;
  3. crear producto;
  4. actualizar precio;
  5. 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:

☕ Apoyar con Mercado Pago

🌎 Apoyar con PayPal


Ruta SQL / MySQL

Ver todos los contenidos de SQL / MySQL

← Vistas en SQL

Funciones almacenadas →


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”

Deja un comentario

Descubre más desde Club Programador

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo