Ошибка объявления целочисленной переменной внутри хранимой функции MySQL

Я получаю сообщение об ошибке при попытке объявить новую хранимую функцию в 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? Наверное, это что-то невероятно простое...!

Большое спасибо заранее.

6
задан Paul Freeman-Powell 1 August 2012 в 10:37
поделиться