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.