Я работаю в хранимой процедуре, которая извлекает запросы из таблицы и выполняет их.Проблема в том, что у меня есть несколько запросов с одинарными / двойными кавычками, и при их выполнении выдается ошибка.
Процедура
delimiter $$
drop procedure if exists run_change_ids_queries$$
create procedure run_change_ids_queries()
begin
declare s_query TEXT;
declare done bool default false;
declare c_queries cursor for
select `query` from `queries` WHERE `executed` = 0 ORDER BY `qry_id` ASC;
declare continue handler for not found set done = true;
open c_queries;
read_loop: loop
fetch c_queries into s_query;
if done then
leave read_loop;
end if;
-- run the query
set @sql = s_query;
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;
-- update executed flag on query
set @update = CONCAT('UPDATE `queries` SET `executed` = 1 WHERE `query` LIKE \'',@sql,'\';');
prepare stmt from @update;
execute stmt;
deallocate prepare stmt;
end loop;
end$$
Запрос update urisegments as s inner join change_product_ids as p on concat('{"product_id":"', p.old_id, '"}') = s.primary_key_value set s.primary_key_value = CONCAT('{"product_id":', p.new_id, '"}') where s.app_namespace = 'Shop' and s.primary_key_value like '%product_id%';
выдает ошибку:
[42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{"product_id":"', p.old_id, '"}') = s.primary_key_value set s.primary_key_value ' at line 1
Обходной путь # 01 Я уже пытался экранировать одинарные / двойные кавычки в \'
и \"
соответственно, но выдает еще одну ошибку: [42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'{\"product_id\":\"\', p.old_id, \'\"}\') = s.primary_key_value set s.primary_k' at line 1
.