@a_pussycan
Начинающий веб-программист

Что не так с командой create function?

хочу создать функцию для поиска сотрудников в таблице

CREATE FUNCTION manager (n VARCHAR, s VARCHAR)
RETURNS VARCHAR DETERMINISTIC
BEGIN
SELECT CONCAT(`name`, ' ', `surname`) AS `ФИО`, `work`, `dep`, `cash` FROM personal WHERE `name` = n AND `surname` = s;
END


Но этот запрос не работает, sql жалуется

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ', s VARCHAR)
RETURNS VARCHAR
BEGIN
SELECT CONCAT(`name`, ' ', `surname`)' at line 1
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Arassir
Программист PHP/JS
Укажите в скобках число у VARCHAR

https://dev.mysql.com/doc/refman/8.0/en/create-pro...
Ответ написан
Комментировать
@Merzley
Во-первых, для типа VARCHAR обязательно указывать его длину. Например, VARCHAR(255).
Во-вторых, раз вы создаете функцию, то в теле обязательно явно указывать операцию RETURN(). Т.е. весь ваш SELECT нужно обернуть в RETURN().
В-третьих, функция не может возвращать несколько полей как результат. Функция всегда возвращает одно значение с типом, указанным с помощью RETURNS. Т.е. если вам надо возвратить все данные пользователя в виде отдельных полей, то функция не подходит, нужно создать представление. Если нужны все поля, но в виде одной строки, то все их надо добавить в CONCAT(). Если нужно вернуть только объединенное ФИО, то и SELECT к таблице здесь не нужен.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы