На первый взгляд, я вижу синтаксическую ошибку:
...
BEGIN
DECLARE MyVariable char(10) <-- needs a semicolon here
SELECT MyVariable = `C2`
...
Каждое утверждение в теле вашей подпрограммы должно заканчиваться точкой с запятой.См. Примеры DECLARE на этой странице руководства: https://dev.mysql.com/doc/refman/8.0/en/local-variable-scope.html
Это должно быть так:
...
BEGIN
DECLARE MyVariable char(10);
SELECT MyVariable = `C2`
...
Ваш комментарий:
Ошибка 1415 означает "не может вернуть набор результатов ".Ваша сохраненная функция выполняет SELECT, не помещая результат в объявленную локальную переменную, используя ключевое слово INTO
.
Вы пытаетесь установить значение MyVariable с помощью =
, но это только сравнение.MyVariable ничего не присваивает.
Без использования INTO
для присвоения переменной ваш оператор SELECT по умолчанию возвращает набор результатов.Это разрешено в хранимой процедуре, но не в хранимой функции.Хранимая функция должна возвращать одно скалярное значение, а не набор результатов.
...
BEGIN
DECLARE MyVariable char(10);
SELECT `C2` INTO MyVariable
FROM MyTable
WHERE `Date` = `C1`;
RETURN MyVariable;
END
PS: я отредактировал ваш вопрос, чтобы заменить термин «пользовательская функция» на «сохраненная функция».Это две разные вещи в MySQL.Вы пишете сохраненную функцию .
В MySQL они используют термин пользовательская функция (UDF) для функции, которую вы реализуете в коде C / C ++ и компилируете в сервер MySQL.Разработчики реже пишут этот тип расширения.