Procedimientos y funciones almacenados

Además de las consultas normales, SQL ofrece herramientas más potentes: los procedimientos almacenados y las funciones almacenadas. Estos objetos permiten crear bloques de código listos para usar una y otra vez 🔄.

Imagina que tienes una consulta compleja para calcular las estadísticas de ventas y la usas todos los días. En lugar de volver a escribirla cada vez, puedes crear un procedimiento o una función y simplemente llamarlo.

¿Para qué sirven?

Los procedimientos y funciones almacenados resuelven varios problemas importantes:

  • 🚀 Reutilización del código: lo escribes una vez y lo usas en todas partes. Sin copias del mismo código repartidas por distintos sitios.
  • ⚡ Rendimiento: el código se ejecuta directamente en el servidor de la base de datos, lo que a menudo es más rápido que las consultas normales.
  • 🔒 Seguridad: puedes dar acceso a un procedimiento sin dar acceso directo a las tablas.
  • 🛡️ Lógica centralizada: toda la lógica de negocio está en un solo lugar, la base de datos.

Diferencias principales

Aunque los procedimientos y las funciones se parecen, hay diferencias importantes entre ellos:

CaracterísticaProcedimientos almacenadosFunciones almacenadas
Valor devueltoPueden no devolver nada o devolver varios valoresSiempre devuelven un único valor
Uso en consultasSe llaman por separadoSe pueden usar en SELECT, WHERE y otras partes de la consulta
Modificación de datosPueden modificar los datos de las tablasEstán pensadas solo para leer datos
LlamadaCALL procedure_name()SELECT function_name()
CaracterísticaProcedimientos almacenadosFunciones almacenadas
Valor devueltoNo pueden devolver valoresSiempre devuelven un único valor
Uso en consultasSe llaman por separadoSe pueden usar en SELECT, WHERE y otras partes de la consulta
Modificación de datosPueden modificar los datos de las tablasPueden modificar los datos de las tablas
LlamadaCALL procedure_name()SELECT function_name()

¿Cuándo usar procedimientos?

Los procedimientos almacenados son la mejor opción cuando necesitas:

  • Ejecutar una secuencia de operaciones (por ejemplo, crear un pedido, descontar el producto del almacén y enviar una notificación)
  • Modificar datos en varias tablas a la vez
  • Implementar una lógica de negocio compleja
  • Devolver varios conjuntos de resultados

Ejemplo de uso de un procedimiento

Supongamos que necesitamos crear un procedimiento para tramitar un pedido:

MySQL 8.4
-- Ejemplo de llamada a un procedimiento (conceptual)
CALL create_order(customer_id = 123, product_id = 456, quantity = 2);

Un procedimiento así puede:

  1. Comprobar si hay existencias del producto en el almacén
  2. Crear un registro en la tabla de pedidos
  3. Actualizar las existencias del producto
  4. Añadir un registro al historial de operaciones

¿Cuándo usar funciones?

Las funciones almacenadas son ideales cuando necesitas:

  • Hacer cálculos y devolver un resultado
  • Crear una fórmula reutilizable
  • Transformar datos de una forma concreta
  • Usar el resultado en otras consultas SQL

Ejemplo de uso de una función

Vamos a crear una función para calcular un descuento:

MySQL 8.4
-- Ejemplo de uso de una función en una consulta
SELECT
    product_name,
    price,
    calculate_discount(price, customer_type) AS discount_amount
FROM Products;

Esta función recibe el precio y el tipo de cliente y devuelve el importe del descuento, que puedes usar en cualquier consulta.

Una regla sencilla para elegir

Si no sabes qué elegir, usa esta regla sencilla:

  • ¿Necesitas obtener un valor para usarlo en una consulta? → Función
  • ¿Necesitas ejecutar un conjunto de acciones o modificar datos? → Procedimiento

Afiancemos lo aprendido

Ahora que conoces las principales diferencias entre procedimientos y funciones, intenta clasificar las tareas en este juego interactivo:

Pantalla demasiado estrecha

El juego necesita una pantalla de al menos 700px de ancho. Amplía la ventana del navegador o gira el dispositivo.

¿Qué viene después?

Este ha sido un artículo introductorio para entender el concepto general. En los siguientes materiales veremos en detalle cómo crear procedimientos y funciones almacenados y cómo trabajar con ellos.