Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

MySql. Не получается создать хранимую функцию.

-- Создайте хранимую функцию hello(), которая будет возвращать приветствие, в
-- зависимости от текущего времени суток. С 6:00 до 12:00 функция должна возвращать
-- фразу "Доброе утро", с 12:00 до 18:00 функция должна возвращать фразу "Добрый
-- день", с 18:00 до 00:00 — "Добрый вечер", с 00:00 до 6:00 — "Доброй ночи".

DELIMITER $$
DROP FUNCTION IF EXISTS hello;
CREATE FUNCTION hello()
RETURNS VARCHAR(50)
DETERMINISTIC
BEGIN
DECLARE nowTime INT;
DECLARE greeting VARCHAR(50);
SET current_hour = HOUR(NOW());
IF current_hour >= 6 AND current_hour < 12 THEN
SET greeting = 'Доброе утро';
ELSEIF current_hour >= 12 AND current_hour < 18 THEN
SET greeting = 'Добрый день';
ELSEIF current_hour >= 18 AND current_hour < 24 THEN
SET greeting = 'Добрый вечер';
ELSE
SET greeting = 'Доброй ночи';
END IF;

RETURN greeting;
END$$

DELIMITER ;


SELECT hello();

Текс задачи и сама написанная функция. Проблема в том, что она не выполняется каждый раз выдаёт ошибку. И понять не могу почему так происходит. Уже исправлял всё что можно и нельзя, но ни как не могу добиться нужного результата. Если есть те, кто разбирается, прошу, помогите. Уже башка взрывается.

По дате
По рейтингу
Аватар пользователя
Новичок
123456789101112131415161718192021
 DROP FUNCTION IF EXISTS hello; -- это вызывается до создания функции
DELIMITER $$
CREATE FUNCTION hello() RETURNS VARCHAR(50)
    DETERMINISTIC
BEGIN
    DECLARE current_hour INT;
    DECLARE greeting VARCHAR(50);
    SET current_hour = HOUR(NOW());
    IF current_hour < 6 THEN
        SET greeting = 'Доброй ночи';
    ELSEIF current_hour < 12 THEN
        SET greeting = 'Доброе утро';
    ELSEIF current_hour < 18 THEN
        SET greeting = 'Добрый день';
    ELSE
        SET greeting = 'Добрый вечер';
    END IF;
    RETURN greeting;
END;
$$
DELIMITER ; 

Но зачем вообще сохранять результат в переменной?

1234567891011121314
 DELIMITER $$
CREATE FUNCTION hello() RETURNS VARCHAR(50)
    DETERMINISTIC
BEGIN
    DECLARE current_hour INT;
    SET current_hour = HOUR(NOW());
    RETURN CASE
               WHEN current_hour <  6 THEN 'Доброй ночи'
               WHEN current_hour < 12 THEN 'Доброе утро'
               WHEN current_hour < 18 THEN 'Добрый день'
               ELSE 'Добрый вечер' END;
END;
$$
DELIMITER ; 
Аватар пользователя
Искусственный Интеллект

надо объявить
DECLARE current_hour INT;