Задавайте вопросы, мы ответим
Вы не зашли.
Вот такое не работает:
CREATE
DEFINER = 'root'@'%'
PROCEDURE UserAdd(
IN v_user_name CHAR(16),
IN v_user_host CHAR(60),
IN v_password VARCHAR(255),
...
sproc: BEGIN
declare granted BOOL;
declare full_user CHAR(80);
...
CREATE USER full_user IDENTIFIED BY PASSWORD v_password;
Чем возможно заменить CREATE USER? Помимо, прямой записи, конечно?
Отредактированно Артём Н. (05.05.2010 11:57:46)
Неактивен
А через PREPARE тоже не работает?
Неактивен
Для Prepare внешняя переменная нужна...
Сейчас попробую.
Неактивен
Для PREPARE можно обойтись CONCAT из строк без переменных вообще.
Неактивен
Так не работает:
PREPARE gu from CONCAT('GRANT USAGE ON *.* TO ', full_user, ' WITH MAX_QUERIES_PER_HOUR ', mqph, ' MAX_UPDATES_PER_HOUR ', muph, ' MAX_CONNECTIONS_PER_HOUR ', mcph, ' MAX_USER_CONNECTIONS ', muc); EXECUTE gu; DEALLOCATE PREPARE gu;
Как обойтись без переменных?
Неактивен
Да, туплю. Я имел в виду, что переменных можно избежать в EXECUTE USING.
А тут — прийдется использовать переменную Назовите ее каким-нибудь
невменяемым именем, тогда вероятность пересечения будет пренебрежимо мала.
Неактивен
Я её сразу обнуляю, после PREPARE. Просто, у меня неприязнь к глобальным переменным.
Отредактированно Артём Н. (06.05.2010 12:16:33)
Неактивен
Дело не в этом. Дело в том, что пользователь может до вызова Вашей процедуры
иметь переменную с этим именем. И расстроится, если Вы ее обнулите на выходе.
Неактивен
OMG... push/pop...
Сделаю подчёркивания, в начале названий. Расстроится - не беда.
Отредактированно Артём Н. (06.05.2010 14:09:56)
Неактивен