Добрый вечер.
Хранимая процедура имеет входной параметр P_LIMIT INT
При использовании этого параметра в процедуре выходит ошибка при сохранении:
SELECT * FROM TABLE1 LIMIT P_LIMIT;
В чем проблема?
LIMIT в хранимых процедурах
-
- Сообщения: 1
- Зарегистрирован: Сб 03 дек 2011 14:37
Почему же, всё понятно: человек хочет управлять количеством сканируемых записей в большой таблице и присылает LIMIT с переменной.Alexander писал(а):Здравствуйте.
Нам не удалось воспроизвести данную проблему.
Не могли бы Вы прислать скрипт данной процедуры и текст ошибки? А также сообщить версии MySQL Server и продукта dbForge Studio for MySQL.
Дело не dbForge Studio, а в самом MySQL. Если я не ошибаюсь и за 2-3 года ничего не изменилось, то параметр типа LIMIT в SQL-запросах всегда должен быть константой, и это даже где-то написано в материалах по MySQL. Действительно, это крайне неудобно, но пока приходится мириться с этим и как-то изворачиваться, например, загружать больщую таблицу в несколько более мелких и читать оттуда последовательно... Или выгружать в несколько XML файлов данных к себе на компьютер...
Re: LIMIT в хранимых процедурах
Т.к. в компилятор СУБД должна прийти константа, т.е. в самой хранимой процедуре должно быть после LIMIT вполне определённое число или диапазон чисел, а не переменная, то советую отказаться от принципов (не вообще - Боже упаси! - а только в данном случае) и написать в основной программе на этот раз не вызов процедуры, а весь запрос в виде текста (т.е. cmd.CommandType = CommandType.Text), вместе с LIMIT и Вашей переменной. Тогда СУБД получит готовый запрос, в котором переменная будет уже заменена на её значение. Должно получиться, успеха!leshayashin писал(а):Добрый вечер.
Хранимая процедура имеет входной параметр P_LIMIT INT
При использовании этого параметра в процедуре выходит ошибка при сохранении:
SELECT * FROM TABLE1 LIMIT P_LIMIT;
В чем проблема?
Лёша Яшин, наверное, уже и сам разобрался, если столько времени не отвечает. А я пользуюсь версией MySQL 5.0, и проблем с воспроизведением ошибки не возникло, т.е. дело в том, что СУБД должна получать LIMIT в виде константы..jp писал(а):to leshayashin
Ошибка не воспроизводится на сервере MySQL 5.5.11.
Сообщите точное сообщение об ошибке, а также укажите версию Вашего MySQL сервера, и конечно же версию dbForge Studio for MySQL.
Сообщите, пожалуйста, неужели в версии 5.5, т.е. вообще в MySQL теперь можно использовать переменный LIMIT в хранимых процедурах?!