Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Тимур Калиякбаров Ученик (145), открыт 3 недели назад
-- Создайте хранимую функцию 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();

Текс задачи и сама написанная функция. Проблема в том, что она не выполняется каждый раз выдаёт ошибку. И понять не могу почему так происходит. Уже исправлял всё что можно и нельзя, но ни как не могу добиться нужного результата. Если есть те, кто разбирается, прошу, помогите. Уже башка взрывается.
2 ответа
Андрей Высший разум (435443) 3 недели назад
 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 ;
Но зачем вообще сохранять результат в переменной?
 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 ;
Тимур КалиякбаровУченик (145) 3 недели назад
Так я тоже пробовал, всё равно ошибку выдаёт
Похожие вопросы