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
них есть область сеанса.