mysql: используйте процедуру внутри триггера

Мне нужно вызвать процедуру, которая изменяет пароль root внутри триггера. это процедура

delimiter //
create procedure foobar ()
begin SET PASSWORD FOR 'root'@'localhost' = 'foobar';
end//
delimiter ;

и это триггер

delimiter //
create trigger rootpass
after delete on map
for each row
begin
call foobar;
end //
delimiter ;

Кажется, синтаксис правильный, но когда я запускаю удаление, я получаю эту ошибку

ОШИБКА 1445 (HY000): не разрешено устанавливать автоматическую фиксацию из сохраненной функции или триггера

Итак, я думаю, что пытаюсь сделать запрещенную вещь, есть ли способ, которым это может работать в mysql? Я знаю, что все это звучит странно/ужасно, но это способ для моего приложения понять, что что-то было удалено.


person James Biffi    schedule 13.06.2017    source источник
comment
нет смысла изменять пароль root внутри процедуры. Кто-то где-то решил совершенно не ту проблему.   -  person Michael - sqlbot    schedule 13.06.2017
comment
Да смысла нет, согласен на 100%, я дурак, и делать это страшно. Тем не менее, мне нужно знать, возможно ли это технически каким-то грязным трюком, если я спрашиваю, потому что мне нужно проверить доказательство некоторого внешнего кода.   -  person James Biffi    schedule 13.06.2017
comment
Я ответил на ваш вопрос ниже, но... Тем не менее, мне нужно знать, возможно ли это технически каким-то грязным трюком, если я спрашиваю, потому что мне нужно проверить какой-то внешний код. ...это утверждение выглядит так, как будто вы играете в игры, здесь... мы предпочитаем вопросы о вашей реальной проблеме, а не вопросы о вашей попытка решения.   -  person Michael - sqlbot    schedule 13.06.2017
comment
Хорошо, моя реальная проблема заключается в том, что движок, использующий mysql, не может получить статус запроса, я должен найти способ сообщить приложению, что запрос завершен, поэтому один из способов - разорвать связь с БД, это сигнализирует приложению, что что-то случилось. После этого я могу восстановить связь и продолжить. Вот почему я хотел изменить корневой файл psw. Другой вариант - выключить сервер или изменить порт, это можно сделать с помощью запроса?   -  person James Biffi    schedule 13.06.2017


Ответы (1)


При выполнении инструкции вызовет неявную фиксацию текущей транзакции этот оператор не разрешен внутри триггера или хранимой функции.

Это включает оператор в хранимой процедуре, который вызывается триггером или функцией — здесь нет уровня абстракции, который делает недопустимое действие более допустимым.

person Michael - sqlbot    schedule 13.06.2017