Table of Contents
Procedimiento pobtenernombreYproducto()
en MySQL
En este tutorial vamos a crear un procedimiento almacenado llamado pobtenernombreYproducto()
. Su función es recuperar, a partir de un ID de cliente, el nombre del cliente y el nombre del producto que ha pedido.
Base de datos y tablas utilizadas
Trabajaremos sobre la base de datos tienda_ropa
, que tiene las siguientes tablas:
USE tienda_ropa;
SELECT * FROM clientes;
SELECT * FROM pedidos;
La tabla clientes
guarda la información de los clientes, y la tabla pedidos
almacena los productos comprados, con una clave ajena id_cliente
que conecta ambas tablas.
Consulta previa
Antes de crear el procedimiento, probamos la consulta directamente:
SELECT c.nombre, p.producto
FROM pedidos AS p
INNER JOIN clientes AS c
ON p.id_cliente = c.id
WHERE c.id = 1;
👉 Esto devuelve el nombre del cliente y el producto asociado al pedido.
Creación del procedimiento
Primero borramos el procedimiento si ya existe, y luego lo creamos:
DROP PROCEDURE IF EXISTS pobtenernombreYproducto;
DELIMITER //
CREATE PROCEDURE pobtenernombreYproducto(
IN pId INT,
OUT pnombre_cliente VARCHAR(30),
OUT pnombre_producto VARCHAR(30)
)
BEGIN
-- Manejo de errores
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT 'error';
ROLLBACK;
END;
-- Consulta para unir clientes y pedidos con INNER JOIN
SELECT c.nombre, p.producto
INTO pnombre_cliente, pnombre_producto
FROM pedidos AS p
INNER JOIN clientes AS c ON p.id_cliente = c.id
WHERE c.id = pId;
END //
DELIMITER ;
Uso del procedimiento
- Declaramos las variables:
SET @vpId = 1;
SET @vpnombre_cliente = '';
SET @vpnombre_producto = '';
- Llamamos al procedimiento:
CALL pobtenernombreYproducto(@vpId, @vpnombre_cliente, @vpnombre_producto);
- Mostramos los resultados:
SELECT @vpnombre_cliente AS 'Nombre del cliente',
@vpnombre_producto AS 'Nombre del producto';

Resultado esperado
Si el cliente con ID = 1
es Carlos y su producto es "Zapatos"
, el resultado será:
Nombre del cliente | Nombre del producto |
---|---|
Carlos | Zapatos |
Consideraciones finales
El procedimiento devuelve el nombre del cliente y el producto asociado a un pedido.
Si un cliente tiene varios pedidos, se producirá un error porque la consulta devuelve más de una fila.
Para solucionarlo, puedes:
- Usar
LIMIT 1
para devolver un único producto. - O bien devolver todos los productos en un
SELECT
en lugar de usar parámetrosOUT
.
Con este procedimiento, aprendiste cómo usar parámetros IN
y OUT
, manejar errores con HANDLER
y unir tablas mediante INNER JOIN
.



FAQ sobre el procedimiento pobtenernombreYproducto()
en MySQL
1. ¿Qué hace el procedimiento pobtenernombreYproducto()
?
Este procedimiento devuelve, a partir de un ID de cliente, el nombre del cliente y el nombre del producto que ha pedido.
2. ¿Qué parámetros utiliza el procedimiento?
IN pId
→ es el parámetro de entrada, que representa el ID del cliente.OUT pnombre_cliente
→ devuelve el nombre del cliente.OUT pnombre_producto
→ devuelve el nombre del producto.
3. ¿Qué ocurre si un cliente tiene varios pedidos?
El procedimiento puede dar error porque la consulta devolvería más de una fila.
👉 Para evitarlo, se puede:
- Usar
LIMIT 1
para obtener solo el primer producto. - O crear una versión alternativa que devuelva todos los productos en un
SELECT
.
4. ¿Qué pasa si el cliente no tiene pedidos?
En ese caso, los parámetros de salida quedarán como NULL
, ya que no se encontrarán coincidencias en la consulta.
5. ¿Por qué se usa INNER JOIN
en el procedimiento?
Porque necesitamos unir dos tablas (clientes
y pedidos
) y relacionarlas a través de la clave foránea id_cliente
. El INNER JOIN
nos asegura que solo aparecerán registros donde exista relación entre ambas tablas.
6. ¿Qué papel cumple el HANDLER
dentro del procedimiento?
El DECLARE EXIT HANDLER FOR SQLEXCEPTION
se encarga de capturar errores de SQL.
En caso de error, muestra el mensaje 'error'
y ejecuta un ROLLBACK
.
7. ¿Cómo se ejecuta el procedimiento?
Primero declaramos las variables:
SET @vpId = 1;
SET @vpnombre_cliente = '';
SET @vpnombre_producto = '';
Luego lo llamamos:
CALL pobtenernombreYproducto(@vpId, @vpnombre_cliente, @vpnombre_producto);
Finalmente mostramos el resultado:
SELECT @vpnombre_cliente AS 'Nombre del cliente',
@vpnombre_producto AS 'Nombre del producto';
8. ¿En qué casos conviene usar procedimientos como este?
Son útiles cuando necesitas:
- Reutilizar consultas de forma dinámica.
- Evitar repetir sentencias SQL manuales.
- Centralizar la lógica de negocio en la base de datos.
Seguir leyendo: