Использование переменных в качестве OFFSET в инструкциях SELECT внутри хранимых функций mysql - PullRequest
5 голосов
/ 19 ноября 2008

Я совершенно новичок в области написания хранимых функций для базы данных mySQL, поэтому я не уверен, возможно ли вообще то, что я пытаюсь сделать здесь.

Мне нужна функция, которая будет возвращать столбец из случайной строки из таблицы. Я не хочу использовать для этого метод ORDER BY RAND (), скорее, я бы сделал это так:

DECLARE MAX_COUNT INT DEFAULT 120000;
DECLARE rand_offset INT;
DECLARE str_rnd_word VARCHAR(255);
SET rand_offset = FLOOR((RAND() * MAX_COUNT));

SELECT word INTO str_rnd_word FROM all_words LIMIT 1 OFFSET rand_offset ;

RETURN str_rnd_word;

MySQL выдает ошибку при создании функции с таким телом. Но когда я использую жестко запрограммированный номер как OFFSET, он работает просто отлично.

Может кто-нибудь пролить свет на эту тему, пожалуйста.

Я использую MySQL 5.0.45 для Windows.

Спасибо

1 Ответ

4 голосов
/ 19 ноября 2008

В MySQL до 5.5 вы не можете поместить переменную в предложение LIMIT в хранимых процедурах MySQL. Вы должны интерполировать его в строку, а затем выполнить строку как динамический запрос.

SET rand_offset = FLOOR(RAND() * (SELECT COUNT(*) FROM all_words));
SET @sql = CONCAT('SELECT word INTO str_rnd_word FROM all_words LIMIT 1 OFFSET ', rand_offset);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...