Имена динамических таблиц в функции хранимых процедур
Мы написали функцию хранимой процедуры, чтобы получить имя из таблицы. Проблема в том, что я хочу, чтобы имя таблицы передавалось как параметр (есть несколько разных таблиц, с которыми мне нужно использовать эту функцию):
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
Этот метод имеет ошибку, потому что он использует имя переменной "TABLENAME» вместо фактического значения переменной.
Я могу обойти эту проблему впроцедура используяCONCAT
как это:
SET @GetName = CONCAT("
SELECT
'name'
FROM
",tableName,"
WHERE
id=",myId,";
");
PREPARE stmt FROM @GetName;
EXECUTE stmt;
... но, когда я пытаюсь сделать это в функции, я получаю сообщение:
Динамический SQL не разрешен в хранимой функции или триггере
Я пытался использоватьпроцедура вместо этого, но я не могполучить его просто вернуть значение, как это делает функция.
Итак, кто-нибудь может увидеть способ обойти эту проблему. Это кажется невероятно простым на самом деле.