使用函数动态生成查询
Dynamically generating query using function
我刚开始学习使用 MYSQL
中定义的函数,我尝试了几个基本示例,但是当我尝试 returns varchar
的函数时,实际上 return 是 select query
的一部分,它给了我一些意想不到的东西。
数据库中有很多 table,列为 id
和 name
,所以每当人们想要为特定的 [=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;
我刚开始学习使用 MYSQL
中定义的函数,我尝试了几个基本示例,但是当我尝试 returns varchar
的函数时,实际上 return 是 select query
的一部分,它给了我一些意想不到的东西。
数据库中有很多 table,列为 id
和 name
,所以每当人们想要为特定的 [=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;