REPEAT
FETCH Randomizer INTO cursor_id;
IF NOT done THEN
UPDATE tempNews SET RandNum = rand();
WHERE id = cursor_id;
END IF;
UNTIL done END REPEAT;
Вы используете унифицированную переменную сеанса SQL Serverвместо переменной, объявленной процедуройMySQL
Перепишите следующим образом:
MySQL
или даже лучше, просто избавитесь от своей временной таблицы вообще, как вы предполагали в первую очередь.
Что касается этого утверждения:
Но я не хочу ничего менять слишком сильно, потому что сейчас я просто пытаюсь преобразовать БД. Я вернусь и оптимизирую этот материал позже.
SQL Serverи MySQLпредставляют собой совершенно разные платформы.
Вы уже изменили все, что было слишком решительно, когда решили переключиться.
В большинстве случаев вы не можете просто скопировать старый код и забить его MySQL.
Возможно, это будет работать между несколькими версиями @cursor_id, поскольку, по крайней мере, есть попытки поддерживать некоторую совместимость между версиями одной и той же платформы, но это определенно не будет работать для переноса MySQL.
То, что я сделал бы, это взять каждую часть вашего кода и убедиться, что он дает те же результаты, что и старый код, используя методы как можно более простые и предсказуемые.
В вашем случае SQL Serverпеременная может быть инициализирована ранее в коде, и ее значение может быть использовано хранимой процедурой, что приведет к любому неожиданному поведению.
Это связано с тем, что в MySQLпеременных есть пакетная область, в то время как в MySQLних есть область сеанса.