Мне нужно написать хранимую процедуру, которая позволит пользователю изменять значения в таблице, но только в определенных строках. В основном это для следователей, чтобы определить параметры датчика, которые они хотят, и поэтому они не могут изменять параметры других пользователей.
У меня есть две таблицы: таблица Parameters
с CultureID
, Code
(каждая культура имеет 3 строки, поэтому различается, какую строку пользователь хочет изменить), столбцы Max_Alert
и Min_Alert
; и таблица Users
, которая показывает с UserID
и CultureID
(чтобы увидеть, кто отвечает за какую культуру и какие строки каждый человек сможет изменить).
Это был код, который я написал, но я продолжаю получать ошибки, особенно с параметром столбца.
CREATE PROCEDURE Alter_Param
(IN id INT,
IN cat INT,
IN column VARCHAR(20),
IN value INT)
BEGIN
SELECT UserID
FROM Users
WHERE CultureID = id
INTO @v1;
IF @v1 = USER()
THEN
UPDATE Parameters
SET Column = value
WHERE id = 'CultureID' AND 'CODE' = cat ;
END IF;
END
Был бы очень признателен за помощь :)
SET Column = value - mysql не выполняет подстановку переменной для имени столбца, вам нужно либо использовать динамический sql, либо тестировать и обновлять для каждого изменяемого столбца.
ГДЕ id = 'CultureID' - Вероятно, это должно быть имя столбца - удалите кавычки.
Спасибо за совет. Я последовал тому, что вы сказали, и вместо этого решил превратить эту часть процедуры в переменную, чтобы обойти ошибку. Это была финальная версия, которая отлично работает!
BEGIN
SELECT IdUser
FROM users
WHERE IdCulture = id
INTO @v1;
IF @v1 = SESSION_USER()
THEN
SET @alt := CONCAT('UPDATE test.parameters SET ', column, ' =', value,' WHERE IdCulture =', id,' AND Code =',cod,';');
PREPARE stmt FROM @alt;
EXECUTE stmt;
END IF;
END
Спасибо за помощь!