首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表名中选择JSON_ARRAYAGG作为参数问题

从表名中选择JSON_ARRAYAGG作为参数问题
EN

Stack Overflow用户
提问于 2020-11-13 03:19:08
回答 1查看 44关注 0票数 0

我想要有一个MySQL过程,它通过JSON_ARRAYAGG从表中选择并返回JSON格式的结果,但表名是一个参数。

这就是我的解决方案,但当我调用它时,它不起作用,因为系统认为参数是表名。如果有人能帮助我,我将不胜感激。

代码语言:javascript
复制
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

调用和错误:

代码语言:javascript
复制
CALL `main_list`('martin');
/* SQL Error (1146): Table 'my_server.the_table' doesn't exist */
EN

回答 1

Stack Overflow用户

发布于 2020-11-13 04:44:52

正如Akina和gotgn已经说过的那样,你不能以这种方式使用tablename,而在其他一些情况下,你可以为它准备Statetemnts

代码语言:javascript
复制
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 ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64810397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档