mysql 调用本机函数“JSON_OBJECT”时的参数计数不正确

acruukt9  于 2023-01-29  发布在  Mysql
关注(0)|答案(1)|浏览(162)

我正在从一个表中获取所有列,并使用函数JSON_OBJECT将结果提取到JSON中,但是当我执行存储过程时,我得到了这个错误。

CREATE DEFINER=`sistema`@`%` PROCEDURE `get_products_as_json`()
BEGIN

SET @fields = (
    'SELECT 
        group_concat(\'\`\', column_name, \'\`\, \', column_name)
    FROM
        information_schema.columns
    WHERE
        table_schema = DATABASE()
            AND table_name = \'products\'
    ORDER BY table_name , ordinal_position'
);

SET @stmt = ('SELECT JSON_OBJECT(?) FROM products LIMIT 10');
PREPARE stmt FROM @stmt;
EXECUTE stmt USING @fields;
DEALLOCATE PREPARE stmt;

END
jm81lzqq

jm81lzqq1#

不能以这种方式使用预准备语句。
你必须连接这个变量。
我还更改了第一个SELECT,这也工作,更好地阅读。

DELIMITER $$
CREATE DEFINER=`sistema`@`%` PROCEDURE `get_products_as_json`()
BEGIN

SET @fields = (
    SELECT 
        group_concat('"', column_name, '", ', column_name)  
    FROM
        information_schema.columns
    WHERE
        table_schema = DATABASE()
            AND table_name = 'products'
    ORDER BY table_name , ordinal_position
);

SET @stmt =  CONCAT('SELECT json_object(',@fields,') FROM products LIMIT 10');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END$$
DELIMITER ;

我还添加了DELIMITER,以防您不使用mysql工作台

相关问题