Cómo crear un USB booteable de Linux Mint 20.1 paso a paso
Los procedimientos almacenados en MySQL (o stored procedures) son bloques de código SQL que se guardan directamente en la base de datos y se pueden ejecutar cuando sea necesario.
Son una herramienta fundamental para automatizar tareas, encapsular lógica de negocio y mejorar el rendimiento en entornos con muchas operaciones repetitivas.
Un procedimiento es una secuencia de instrucciones SQL que se ejecutan como una unidad.
En lugar de repetir consultas complejas, puedes definirlas una sola vez dentro de un procedimiento y luego llamarlas con un simple comando.
Ventajas principales:
Reutilización del código SQL.
Mayor rendimiento, al ejecutarse directamente desde el servidor.
Mantenimiento más sencillo.
Control de seguridad sobre la lógica de negocio.
En sistemas como tiendas online, bibliotecas o CRMs, los procedimientos son ideales para automatizar tareas de validación, inserción o actualización de datos.
Para crear un procedimiento en MySQL se usa la instrucción CREATE PROCEDURE.
Sin embargo, es importante cambiar temporalmente el DELIMITER, ya que el cuerpo del procedimiento suele incluir ; y MySQL, por defecto, lo interpreta como final de la instrucción.
DELIMITER //
CREATE PROCEDURE ejemploBasico()
BEGIN
SELECT 'Hola, este es un procedimiento en MySQL';
END //
DELIMITER ;
Una vez creado, puedes ejecutarlo con:
CALL ejemploBasico();
El comando DELIMITER indica a MySQL qué carácter marca el final de una instrucción.
Por defecto es ;, pero al crear procedimientos o funciones lo cambiamos (por ejemplo, a // o $$) para evitar confusiones.
DELIMITER //
CREATE PROCEDURE ejemplo()
BEGIN
SELECT 'Prueba de delimitador';
END //
DELIMITER ;
De esta forma, MySQL entiende que la instrucción termina al encontrar //, no cada vez que vea un ; dentro del bloque.
Las palabras clave BEGIN y END enmarcan el cuerpo del procedimiento.
Dentro de ese bloque puedes incluir tantas instrucciones SQL como necesites, separadas por punto y coma ;.
Ejemplo:
BEGIN
INSERT INTO usuarios (nombre, email) VALUES ('Carlos', 'carlos@mail.com');
SELECT COUNT(*) FROM usuarios;
END;
SELECT INTO se usa para guardar el resultado de una consulta en variables internas dentro del procedimiento.
Esto permite manipular los valores antes de devolverlos o realizar comparaciones.
Ejemplo:
SELECT nombre INTO @v_nombre FROM clientes WHERE id_cliente = 3;
Aquí el nombre del cliente con id_cliente = 3 se guarda en la variable @v_nombre.
Los procedimientos pueden recibir parámetros para hacerlos dinámicos y reutilizables.
Hay tres tipos:
IN: Se usa como entrada. No se modifica dentro del procedimiento.
OUT: Se usa para devolver valores al final del procedimiento.
INOUT: Se usa como entrada y salida (puede modificarse durante la ejecución).
CREATE PROCEDURE obtenerSalario(IN emp_id INT, OUT salario DECIMAL(10,2))
BEGIN
SELECT sueldo INTO salario FROM empleados WHERE id = emp_id;
END;
A continuación, un procedimiento más avanzado que obtiene el nombre y la fecha de nacimiento de un autor, controlando posibles errores con EXIT HANDLER.
-- Seleccionamos la base de datos
USE bd_biblioteca;
-- Eliminamos el procedimiento si ya existe
DROP PROCEDURE IF EXISTS pobtenerNombreyFecha;
DELIMITER //
CREATE PROCEDURE pobtenerNombreyFecha (
IN pId INT,
OUT pnombre VARCHAR(100),
OUT pfecha_nacimiento DATE
)
BEGIN
-- Manejador de excepciones SQL
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
SELECT 'Error en la ejecución del procedimiento' AS mensaje;
END;
-- Obtenemos los datos del autor según su ID
SELECT a.nombre, a.fecha_nacimiento
INTO pnombre, pfecha_nacimiento
FROM autores AS a
WHERE a.Id = pId;
END //
DELIMITER ;
-- Probamos el procedimiento
SET @vpId = 2;
SET @vpnombre = '';
SET @vpfecha_nacimiento = '';
CALL pobtenerNombreyFecha(@vpId, @vpnombre, @vpfecha_nacimiento);
SELECT @vpId AS id, @vpnombre AS nombre, @vpfecha_nacimiento AS 'Fecha de Nacimiento';
| id | nombre | Fecha de Nacimiento |
|---|---|---|
| 2 | Luis Pérez | 1985-04-21 |
Para ejecutar un procedimiento, simplemente usa la instrucción CALL:
CALL nombreDelProcedimiento(param1, param2, ...);
Ejemplo sin parámetros:
CALL ejemploBasico();
Ejemplo con parámetros:
CALL pobtenerNombreyFecha(2, @nombre, @fecha);
Los procedimientos almacenados en MySQL son una herramienta clave para mantener tu base de datos organizada, segura y eficiente.
Con ellos puedes:
Centralizar la lógica SQL dentro del servidor.
Reducir código repetido en tus aplicaciones.
Aumentar la velocidad de ejecución de consultas complejas.
Controlar errores de manera profesional con HANDLER.
Aprender a dominarlos es un paso esencial para cualquier desarrollador o administrador de bases de datos.
¿Cuál es la diferencia entre un procedimiento y una función en MySQL?
Un procedimiento puede devolver múltiples valores o conjuntos de resultados, mientras que una función solo devuelve un valor único.
¿Puedo usar transacciones dentro de un procedimiento?
Sí, puedes usar START TRANSACTION, COMMIT y ROLLBACK para controlar transacciones dentro del bloque BEGIN...END.
¿Qué pasa si no cambio el DELIMITER?
MySQL interpretará el primer ; como el final de la instrucción y generará un error de sintaxis. Siempre debes cambiar el delimitador al crear o modificar procedimientos.
¿Puedo modificar un procedimiento ya creado?
No directamente. Primero debes eliminarlo con DROP PROCEDURE IF EXISTS y luego volver a crearlo con las modificaciones necesarias.
¿Cómo veo los procedimientos existentes en mi base de datos?
Ejecuta:
SHOW PROCEDURE STATUS WHERE Db = 'nombre_de_tu_base';
Comentarios
Publicar un comentario