✅ Решения
⚡ Кратко: ✅ решения
Пользовательская функция в MySQL создаётся командой CREATE FUNCTION и возвращает одно значение.
Функция объявляет параметры, тип результата через RETURNS, тело между BEGIN и END, а результат отдаёт через RETURN.
Для MySQL в учебных примерах используется DELIMITER //, чтобы точки с запятой внутри тела не завершали весь скрипт раньше времени.
Ключевое свойство DETERMINISTIC означает, что при одинаковых входных данных функция возвращает одинаковый результат.
Минимальный пример: SELECT square_root(25); после создания функции square_root(x DOUBLE) вернёт квадратный корень.
Топ-3 ошибки: забыть DELIMITER, не указать RETURNS, использовать функцию с текущей датой как DETERMINISTIC без проверки документации.
Решение 1. Изменение регистра
DELIMITER //
CREATE FUNCTION to_uppercase(input_text VARCHAR(255))
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
RETURN UPPER(input_text);
END //
DELIMITER ;
SELECT to_uppercase('hello sql');
UPPER делает всю работу с регистром, а пользовательская функция даёт удобное имя для повторного использования.
Решение 2. Проверка чётности
DELIMITER //
CREATE FUNCTION is_even(number_value INT)
RETURNS BOOLEAN
DETERMINISTIC
BEGIN
RETURN number_value % 2 = 0;
END //
DELIMITER ;
SELECT is_even(10), is_even(11);
Оператор % возвращает остаток от деления. Если остаток от деления на 2 равен нулю, число чётное.
Домашка. Площадь круга
DELIMITER //
CREATE FUNCTION circle_area(radius DECIMAL(10,2))
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
RETURN PI() * POW(radius, 2);
END //
DELIMITER ;
Домашка. Гипотенуза
DELIMITER //
CREATE FUNCTION hypotenuse(side_a DECIMAL(10,2), side_b DECIMAL(10,2))
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
RETURN SQRT(POW(side_a, 2) + POW(side_b, 2));
END //
DELIMITER ;