我想要有一个MySQL过程,它通过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 */发布于 2020-11-13 04:44:52
正如Akina和gotgn已经说过的那样,你不能以这种方式使用tablename,而在其他一些情况下,你可以为它准备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 ;https://stackoverflow.com/questions/64810397
复制相似问题