在mysql存储函数内的SELECT语句中使用变量作为OFFSET
-
08-07-2019 - |
题
我对于为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在使用body创建函数时抛出错误。但是,当我使用硬编码的数字作为OFFSET时,它的工作正常。
请有人对这个问题有所了解。
我在Windows机器上运行MySQL 5.0.45。
由于
解决方案
在5.5之前的MySQL中,你不能将变量放入MySQL存储过程的LIMIT
子句中。您必须将其插入到字符串中,然后将该字符串作为动态查询执行。
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;
不隶属于 StackOverflow