MySQL Funciones almacenadas - Tabla dinámica / variable y nombres de columna

Estoy aprendiendo procedimientos almacenados / funciones / desencadenantes en MySQL esta mañana y tengo algunos problemas al tratar de usar nombres de tablas y columnas variables en las consultas.

DELIMITER |
USE R2R |
DROP FUNCTION IF EXISTS getCategoryName |
CREATE FUNCTION getCategoryName(LMID INT, levelNum INT)
    RETURNS VARCHAR(255)
    BEGIN

        DECLARE levelName VARCHAR(255) DEFAULT makeLevelName(levelNum);
        DECLARE levelID INT;
        DECLARE levelNameID VARCHAR(255) DEFAULT CONCAT(levelName, 'ID');
        DECLARE ret VARCHAR(255);

        SELECT @levelNameID INTO levelID FROM LevelMaster WHERE id=LMID;
        SELECT description INTO ret FROM @levelName WHERE id=levelID;
        RETURN ret;
    END;
|
DROP FUNCTION IF EXISTS makeLevelName |
CREATE FUNCTION makeLevelName(levelNum INT)
    RETURNS VARCHAR(255)
    BEGIN

        DECLARE word VARCHAR(255);
        DECLARE ret VARCHAR(255);
        IF levelNum=2 THEN SET word='Two';
        ELSEIF levelNum=3 THEN SET word='Three';
        ELSEIF levelNum=4 THEN SET word='Four';
        ELSEIF levelNum=5 THEN SET word='Five';
        END IF;

        SET ret=CONCAT('Level', word);

        RETURN ret;
    END;
|
SELECT getCategoryName(347, 2) |

Es la primera función (getCategoryName) que me está causando los problemas, necesito que las dos variables marcadas con @ sean los nombres de la tabla / columna: estas dos líneas:

SELECT @levelNameID INTO levelID FROM LevelMaster WHERE id=LMID;
SELECT description INTO ret FROM @levelName WHERE id=levelID;

Quiero mantener esta función como una función en lugar de un procedimiento si es posible, pero aceptaría respuestas para un procedimiento si es la única forma.

Gracias por tu ayuda

Ricard

Respuestas a la pregunta(1)

Su respuesta a la pregunta