我编写了一个存储过程函数来从表中获取名称。问题是我希望将表名作为参数传入(我需要使用几个不同的表来使用这个函数):
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
我试图改用一个过程,但我不能让它像函数一样只返回一个值。
因此,任何人都可以找到解决此问题的方法。它看起来非常基本。