Я получил подсказку от О.Джонса и пошел создавать сохраненную функцию.
Вот что я создал:
DELIMITER $$
СОЗДАТЬ ФУНКЦИЮ change_int (colres VARCHAR (500)) RETURNS INT (11)
НАЧИНАТЬ
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`);
Не повезло.
@ О.Джонс, спасибо тебе огромное, это действительно дало мне направление. Не могли бы вы посмотреть, почему в моем заявлении появляется ошибка?
Вы читали dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.htm l и установили ли вы разделители?






У вас отсутствует столбец перед END WHILE. Это должен быть END WHILE;
И последнее, не могу назвать это. пробовал: ОБНОВЛЕНИЕ gd_accounts УСТАНОВИТЬ account_number = change_int (account_number); ОБНОВЛЕНИЕ gd_accounts НАБОР account_number = db_name.change_int (account_number); GET: # 1630 - FUNCTION db_name.SUBSTRING не существует. Проверьте раздел «Анализ и разрешение имени функции» в Справочном руководстве.
Такие вещи называются сохраненная функция.. В intertoobz есть много примеров и руководств.