MySQL скрипт внутри оператора set - PullRequest
0 голосов
/ 27 декабря 2018

Я получил подсказку от O.jones и пошел создавать хранимую функцию.

Вот что я создал:

РАЗДЕЛИТЕЛЬ $$ CREATE FUNCTION change_int (colres VARCHAR (500)) ВОЗВРАЩАЕТ INT (11)
BEGIN

    DECLARE res int(11);
    DECLARE leng int(11);
    DECLARE newres int(11);
    DECLARE mult int(11);
    DECLARE temp1 int(11);
    DECLARE temp2 int(11);  

SET res = CAST(colres AS UNSIGNED);
SET leng = CHAR_LENGTH(CAST( colres AS CHAR)); 
SET newres = 0;
SET mult = 1;
SET temp1 = 0;
SET temp2 = 0;


WHILE (res > 0) DO

    SET temp1 = MOD(res , 10 );
    SET res = (res DIV 10);
    SET temp2 = MOD(res , 10 );
    SET newres = (newres +((temp1 + temp2 ) * mult));       
    SET mult = mult*10;
END WHILE;
SET newres = SUBSTRING (newres, 1, leng );
RETURN newres;  
END $$
DELIMITER ;

Но яя получаю сообщение об ошибке при запуске в строке 6:

#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 ''res' = CAST(colres AS CHAR)' at line 6

Добавлен разделитель, новая ошибка:

 #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 'SET newres = SUBSTRING (newres, 1, leng );
    RETURN newres;    
    END' at line 27

Величина теперь работаетНо я не могу вызвать ее:

Запустил тест с:

SHOW FUNCTION STATUS;

И он существует.

Когда я пытаюсь запустить его так:

UPDATE `table` SET `col1` = function_name(`col1`);

Также пробовал:

UPDATE `table` SET `col1` = db.function_name(`col1`);

Не повезло.

1 Ответ

0 голосов
/ 27 декабря 2018

У вас отсутствует столбец до END WHILE.Должно быть END WHILE;

Рабочий пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...