【问题标题】:SELECT JSON_ARRAYAGG FROM TABLE name as parameter problemSELECT JSON_ARRAYAGG FROM TABLE 名称作为参数问题
【发布时间】: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。

标签: mysql sql json stored-procedures


【解决方案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 ;

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2011-04-06
    • 2011-09-09
    相关资源
    最近更新 更多