SELECT JSON_ARRAYAGG FROM TABLE 名称作为参数问题
Posted
技术标签:
【中文标题】SELECT JSON_ARRAYAGG FROM TABLE 名称作为参数问题【英文标题】:SELECT JSON_ARRAYAGG FROM TABLE name as parameter problem 【发布时间】:2020-11-12 19:19:07 【问题描述】:我想要一个 mysql 过程,它可以生成 SELECT FROM 表并通过 JSON_ARRAYAGG 以 JSON 格式返回结果,但表名是一个参数。
所以有我的解决方案,但是我调用它时它不起作用,因为系统认为参数是表名。如果有人可以帮助我,我将非常感激。
CREATE DEFINER=`ME` PROCEDURE `main_list`(
IN `the_table` CHAR(50)
)
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
SELECT JSON_ARRAYAGG(JSON_OBJECT('id', id,'name', NAME)) from the_table;
END
调用和错误:
CALL `main_list`('martin');
/* SQL Error (1146): Table 'my_server.the_table' doesn't exist */
【问题讨论】:
表名不能取自变量,使用动态SQL。 【参考方案1】:正如 Akina 和 gotgn 已经说过的那样,您不能以这种方式使用 tablename,而在其他一些 ise PREPARE Statetemnts 中则不能使用它
DELIMITER //
CREATE PROCEDURE `main_list`(
IN `the_table` CHAR(50)
)
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
SET @sql := CONCAT("SELECT JSON_ARRAYAGG(JSON_OBJECT('id', id,'name', NAME)) FROM ",the_table);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
DELIMITER ;
【讨论】:
以上是关于SELECT JSON_ARRAYAGG FROM TABLE 名称作为参数问题的主要内容,如果未能解决你的问题,请参考以下文章
SqlServer对select * from (select *from table) 支持