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 名称作为参数问题的主要内容,如果未能解决你的问题,请参考以下文章

第六章 SQL聚合函数 JSON_ARRAYAGG

PLSQL如何快速打出select * from

SqlServer对select * from (select *from table) 支持

select into from 与 select into from opendatasource

abap中select * from 后面能跟变量吗?

相当于“SELECT * FROM (SELECT table_name FROM ...)”的东西?