使用函数动态生成查询

Dynamically generating query using function

我刚开始学习使用 MYSQL 中定义的函数,我尝试了几个基本示例,但是当我尝试 returns varchar 的函数时,实际上 return 是 select query 的一部分,它给了我一些意想不到的东西。

数据库中有很多 table,列为 idname,所以每当人们想要为特定的 [=16= 获取 id ] 反之亦然,他们进入 table 并手动获取数据。所以我试图创建一个函数来简化这个过程。

这是我的功能

create function getTableDetails(table_name varchar(20), id int(5), name varchar(20)) 
returns varchar(50)
begin
    return " * from " + table_name + " where id = " + id + 
               " or name like '%" + name + "%'";
end

如您所见,我正在尝试概括所有 table 的查询,它 return 除了 select 关键字之外的所有内容。

现在我的查询会像 select getTableDetails('classes', 2, 'a')

假设函数的 return 将填充查询的其余部分并给我 table 数据,但我得到的结果集是

getTableDetails('classes'; 2; 'a')
2

getTableDetails('classes'; 2; 'a') 就是 header.

我哪里错了?

您不能从命令行动态生成和执行这样的查询。您需要使用 preparedstatement 并且也需要从存储过程中使用,例如:

SET @query = CONCAT('select', getTableDetails('classes', 2, 'a'));

PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;