使用函数动态生成查询

时间:2017-07-01 07:16:19

标签: mysql select user-defined-functions

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

数据库中有很多表格,其中列为idname,因此每当有人想要为特定id获取name或反之亦然时,他们会进入该表并手动获取数据。所以我试图创建一个能够平滑过程的函数。

这是我的功能

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

正如您所看到的,我试图概括所有表格的查询,并返回select关键字以外的所有内容。

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

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

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

getTableDetails('classes'; 2; 'a')是标题。

我哪里出错了?

1 个答案:

答案 0 :(得分:2)

您无法从命令行动态生成和执行此类查询。您需要使用preparedstatement,也可以使用存储过程,例如:

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

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