Puedes probar cualquier procedimiento en nuestra consola interactiva: Abrir consola SQL →
Procedimientos almacenados en SQL: lógica encapsulada en la base de datos
Los procedimientos almacenados permiten encapsular lógica compleja dentro de la base de datos. Mejoran rendimiento, seguridad y reutilización del código.
Tabla de contenidos
1. ¿Qué es un procedimiento almacenado?
Es un bloque de código SQL que se almacena en la base de datos y puede ejecutarse múltiples veces.
2. Crear un procedimiento
CREATE PROCEDURE sumar_saldo(IN cantidad INT)
BEGIN
UPDATE cuentas SET saldo = saldo + cantidad;
END;
3. Parámetros IN, OUT e INOUT
CREATE PROCEDURE obtener_saldo(IN id INT, OUT saldo_total INT)
BEGIN
SELECT saldo INTO saldo_total FROM cuentas WHERE cuenta_id = id;
END;
CREATE PROCEDURE ajustar(INOUT valor INT)
BEGIN
SET valor = valor * 2;
END;
4. Modificar procedimientos
ALTER PROCEDURE sumar_saldo COMMENT 'Actualiza el saldo de todas las cuentas';
5. Eliminar procedimientos
DROP PROCEDURE IF EXISTS sumar_saldo;
6. Ejemplos prácticos
-- Procedimiento para transferencias
CREATE PROCEDURE transferir(IN origen INT, IN destino INT, IN monto INT)
BEGIN
UPDATE cuentas SET saldo = saldo - monto WHERE id = origen;
UPDATE cuentas SET saldo = saldo + monto WHERE id = destino;
END;
-- Procedimiento con validación
CREATE PROCEDURE agregar_producto(IN nombre VARCHAR(50), IN precio INT)
BEGIN
IF precio < 0 THEN
SET precio = 0;
END IF;
INSERT INTO productos(nombre, precio) VALUES(nombre, precio);
END;
7. Ejercicios para practicar
- Crea un procedimiento con parámetro IN.
- Crea un procedimiento con parámetro OUT.
- Crea un procedimiento con INOUT.
- Haz un procedimiento que valide datos.
- Explica cuándo usar procedimientos.
CREATE PROCEDURE p1(IN x INT) BEGIN SELECT x; END;
CREATE PROCEDURE p2(IN id INT, OUT total INT)
BEGIN SELECT saldo INTO total FROM cuentas WHERE id=id; END;
CREATE PROCEDURE p3(INOUT v INT) BEGIN SET v=v+10; END;
-- Se usan para encapsular lógica repetitiva.
8. Mini‑proyecto: API interna de procedimientos
CREATE PROCEDURE registrar_venta(IN producto INT, IN cantidad INT)
BEGIN
INSERT INTO ventas(producto_id, cantidad, fecha)
VALUES(producto, cantidad, NOW());
END;
9. Errores comunes
- Usar procedimientos para todo.
- No validar parámetros.
- No documentar procedimientos.
- Ignorar rendimiento.
10. Preguntas frecuentes
¿Los procedimientos mejoran el rendimiento?
Sí, al ejecutarse dentro del motor.
¿Son portables entre bases?
No siempre, la sintaxis varía.