Мне нужно создать хранимую процедуру, которая использует подготовленные операторы, целью которых является обновление таблицы.Дело в том, что я заранее не знаю, какие столбцы таблицы будут обновлены.Это может быть один столбец, несколько или все из них.Я создал процедуру ниже, но столкнулся с проблемой, которую не могу понять:
CREATE DEFINER=`root`@`localhost`
PROCEDURE `updateEntries`( IN setcols varchar(200),
IN column varchar(20),
IN relation varchar(10),
IN value varchar(15),
IN setvalue varchar(100)
)
BEGIN
SET @sql = CONCAT('UPDATE table SET ',setcols,' WHERE ', column,' ', relation,' ?');
SET @setvalue = setvalue;
SET @value = value;
PREPARE stmt FROM @sql;
EXECUTE stmt USING @setvalue, @value;
DEALLOCATE PREPARE stmt;
END
Я могу легко вызвать процедуру, когда мне нужно обновить только один столбец, например: call updateEntries('column = ?','id', '>', 2, 'new_value')
, потому что мой *Тогда 1005 * будет: UPDATE table SET column = ? WHERE id > ?;
new_value
будет присвоено @setvalue
, а 2
будет назначено value
, после чего выполняется каждый.
Однако я не могу понять, что следуетЯ делаю это, когда нужно обновить несколько столбцов, так как мне нужно хранить все эти новые значения для каждого столбца в переменных, которые EXECUTE
будет использовать.Есть ли способ сохранить все новые значения в одну переменную, может быть, строку, и моя процедура выбрать значения из нее?Или какие у меня есть варианты?