Помогите мне с этим кодом курсора MySql

Ответов: 1


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

MySQL, хранимые-процедуры, курсор, выборки,
Похожие вопросы