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.
Te puede interesar:
Funciones en MySQL: Ejemplos, Sintaxis y Casos Prácticos
Seguir leyendo:






