Я получаю сообщение об ошибке при попытке объявить новую хранимую функцию в MySQL (Версия сервера :5.5.13)
По сути, у меня есть большая таблица, которая классифицирует строки в зависимости от того, как они начинаются. Моя функция берет строку (из пользовательского ввода ), а затем сообщает вам классификацию этой строки путем поиска классификации в базе данных. Это немного похоже на запрос LIKE, за исключением того, что это пользовательский ввод, который содержит полную строку, а база данных содержит искомую строку. Надеюсь, это имеет смысл!
Концепция и логика, лежащие в основе этого, работают нормально, поскольку я написал/разработал это на PHP, и это прекрасно работает, однако при попытке перевести это в хранимую функцию я получаю сообщение об ошибке от MySQL. Код функции:
delimiter $
DROP FUNCTION IF EXISTS get_string_class$
CREATE FUNCTION get_string_class(mystring VARCHAR(15))
RETURNS VARCHAR(15)
READS SQL DATA
BEGIN
DECLARE i INT;
SET i = 2;
DECLARE mystringlength INT;
SET mystringlength = LENGTH(mystring);
DECLARE segment VARCHAR(15);
DECLARE String_Class VARCHAR(15);
SET String_Class = NULL;
WHILE i <= mystringlength DO
SET segment = LEFT(mystring, i);
SET String_Class = (SELECT String_Class FROM string_class_list WHERE String_Begins = segment);
IF SELECT FOUND_ROWS() = 1 THEN
RETURN String_Class
END IF;
i = i + 1;
END WHILE;
RETURN String_Class;
END$
delimiter ;
Я получаю эту ошибку:
#1064 - 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
'DECLARE mystringlength INT; SET mystringlength = LENGTH(mystring);
DECLARE segm' at line 10
Я много играл, пытаясь понять, где я ошибаюсь. Я даже полностью отключил цикл, чтобы проверить его, но все равно получаю ту же ошибку. Кто-нибудь знает, что я сделал неправильно, объявив эту переменную INT? Наверное, это что-то невероятно простое...!
Большое спасибо заранее.