Dynamiczne nazwy tabel w funkcji procedury składowanej

Napisałem funkcję procedury składowanej, aby uzyskać nazwę z tabeli. Problem polega na tym, że chcę, aby nazwa tabeli została przekazana jako parametr (z kilkoma różnymi tabelami muszę korzystać z tej funkcji):

DELIMITER $

CREATE DEFINER=`root`@`localhost` FUNCTION `getName`(tableName VARCHAR(50), myId INT(11)) RETURNS VARCHAR(50)

  begin

  DECLARE myName VARCHAR(50);

  SELECT
    'name' INTO myName
  FROM
    tableName
  WHERE 
    id=myId;

  RETURN myName;

  end

Ta metoda ma błąd, ponieważ używa nazwy zmiennej „tableName” zamiast rzeczywistej wartości zmiennej.

Mogę obejść ten problem wprocedura używając aCONCAT lubię to:

    SET @GetName = CONCAT("
    SELECT
       'name'
    FROM
        ",tableName,"
    WHERE 
        id=",myId,";
    ");

    PREPARE stmt FROM @GetName;
    EXECUTE stmt;

... ale kiedy próbuję to zrobić w funkcji, otrzymuję komunikat mówiący:

Dynamiczny SQL nie jest dozwolony w funkcji przechowywanej lub wyzwalaczu

Próbowałem użyć aprocedura zamiast tego, nie mogłem go zmusić do zwrócenia wartości, podobnie jak funkcja.

Czy ktoś może zobaczyć sposób obejścia tego problemu? Wygląda na to, że jest naprawdę podstawowy.

questionAnswers(2)

yourAnswerToTheQuestion