调用本机函数时参数计数不正确 'JSON_OBJECT'
Incorrect parameter count in the call to native function 'JSON_OBJECT'
我正在从 table 中获取所有列,并使用函数 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
您不能以这种方式使用准备好的语句。
您必须连接变量
我也改了第一个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 FROM products LIMIT 10');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
我还添加了分隔符以防你不使用 mysql workbench
我正在从 table 中获取所有列,并使用函数 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
您不能以这种方式使用准备好的语句。
您必须连接变量
我也改了第一个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 FROM products LIMIT 10');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
我还添加了分隔符以防你不使用 mysql workbench