В MySQL 8.0.19 и Workbench достаточно использовать DETERMINISTI C
EDIT:
Чтобы уточнить, такие функции функции, как DETERMINISTI C, NO SQL или READS SQL DATA ничего не решает, а только указывает, что вы приняли решение о его безопасности. Функции с NO SQL или READS SQL DATA четко указывают MySQL, что внутри данных нет манипуляций с данными, и они безопасны.
Используя DETERMINISTI C, вы сообщаете mysql, что это безопасно запускать эту функцию, которая манипулирует данными внутри ..
См. объяснение mysql , которое гласит:
По умолчанию для CREATE Оператор FUNCTION, который должен быть принят, должен быть явно указан как минимум один из DETERMINISTI C, NO SQL или READS SQL DATA.
CREATE DEFINER=`root`@`localhost` FUNCTION `DoSomething`(employeeName VARCHAR(30)) RETURNS int
DETERMINISTIC
BEGIN
DECLARE income INT;
SELECT Salary
INTO income
FROM Employee
WHERE Name = employeeName;
UPDATE Employee
SET Salary = 300
WHERE Name = employeeName;
IF income < 5000 THEN
RETURN 0;
ELSE
RETURN (income - 5000) * 0.1;
END IF;
END
Обновляет сотрудника