Кажется, celular
- это столбец строкового типа, и вы пытаетесь обновить его, используя числовые значения, и из-за этого возникает проблема.Для решения этой проблемы создание курсора в процедуре и вызов его может быть надежным способом:
CREATE PROCEDURE Upd_Celular()
BEGIN
DECLARE v_celular varchar(50);
DECLARE v_celular2 int;
DECLARE v_celular3 int;
DECLARE v_id int;
DECLARE finished BOOL DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT id, celular,
case when strcmp( cast(celular as signed) , celular ) = 0 then 1 else 0 end
as celular2, cast(celular as signed) as celular3
FROM usuarios_registrados;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
OPEN cur;
REPEAT FETCH cur INTO v_id,v_celular,v_celular2,v_celular3;
IF NOT finished
AND v_celular2 != 0
AND v_celular3 BETWEEN 1 AND 19999999
THEN
UPDATE usuarios_registrados s
SET s.celular = '0'
WHERE s.id = v_id;
END IF;
UNTIL finished END REPEAT;
CLOSE cur;
END;
Демо