Table of Contents
Crear función obtenerNombre(pId)
en MySQL
En esta ocasión creamos una función en MySQL llamada obtenerNombre(pId)
, que nos permitirá obtener el nombre de un autor a partir de un parámetro de entrada.
Usaremos un parámetro de tipo entero (pId
) en la cláusula WHERE, de manera que podamos buscar un autor por un ID concreto. Esta es una forma muy práctica de encapsular consultas y reutilizarlas dentro de tu base de datos.
Código completo de la función
1. Eliminar la función si ya existe
Es recomendable borrarla antes de crearla para evitar errores:
DROP FUNCTION IF EXISTS obtenerNombre;
2. Cambiar el delimitador
Como trabajamos con bloques de código, debemos modificar el delimitador temporalmente:
DELIMITER //
3. Crear la función
Ahora sí, creamos la función obtenerNombre
:
CREATE FUNCTION obtenerNombre (pId INT)
RETURNS VARCHAR(30)
DETERMINISTIC
BEGIN
-- Declaramos la variable para almacenar el resultado
DECLARE vnombre VARCHAR(30);
-- Guardamos el nombre en la variable según el id recibido
SELECT nombre INTO vnombre
FROM autores
WHERE id = pId;
-- Devolvemos el valor
RETURN vnombre;
END //
DELIMITER ;
4. Probar la función
Creamos una variable con el ID y llamamos a la función:
SET @vid = 2;
SELECT IFNULL(obtenerNombre(@vid), 'No hay autores')
AS "El nombre con el Id especificado es";
Resultado de la función
- Si el ID existe: mostrará el nombre del autor asociado.
- Si el ID no existe: gracias a
IFNULL
, devolverá el texto"No hay autores"
.
De esta forma, evitamos errores y mostramos un mensaje más claro al usuario.
Recomendaciones

Añade el modificador DETERMINISTIC
siempre que la función devuelva resultados consistentes para un mismo parámetro.
Ajusta el tipo de dato (VARCHAR(30)
) a la longitud real de tu campo nombre
.
Usa IFNULL()
o COALESCE()
cuando la función pueda devolver valores nulos.






Preguntas frecuentes sobre la función obtenerNombre(pId)
en MySQL
1. ¿Qué diferencia hay entre un procedimiento almacenado y una función en MySQL?
Un procedimiento puede ejecutar varias instrucciones y no siempre devuelve un valor, mientras que una función devuelve siempre un resultado que puede usarse en consultas SQL.
2. ¿Por qué usamos DELIMITER //
al crear funciones?
Se cambia el delimitador para que MySQL no confunda los puntos y comas internos del bloque con el final de la función.
3. ¿Qué hace la cláusula DETERMINISTIC
?
Indica que la función devuelve siempre el mismo resultado si recibe los mismos parámetros de entrada, lo que ayuda a la optimización de consultas.
4. ¿Cómo manejo los casos cuando el ID no existe en la tabla?
Puedes usar IFNULL()
o COALESCE()
para devolver un mensaje personalizado como “No hay autores”.
5. ¿Puedo usar esta función dentro de otra consulta SQL?
Sí, puedes llamarla directamente en SELECT
, WHERE
o incluso en otras funciones, siempre que no genere ambigüedad en la lógica de la consulta.
Seguir leyendo: