Неправильный подсчет параметров при вызове встроенной функции ‘JSON_OBJECT’

#mysql #json #stored-procedures

#mysql #json #хранимые процедуры

Вопрос:

Я получаю все столбцы из таблицы и извлекаю результат в JSON, используя функцию JSON_OBJECT. Но когда я выполняю хранимую процедуру, я получаю эту ошибку.

 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
  

Ответ №1:

Вы не можете использовать подготовленные инструкции таким образом.

Вы должны объединить переменную.

Я также изменил первый 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 ;
  

Я добавил также РАЗДЕЛИТЕЛЬ на случай, если вы не используете mysql workbench