#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