9

我对为 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 在使用这样的主体创建函数时抛出错误。但是当我使用硬编码数字作为偏移量时,它工作得很好。

有人可以对这个主题有所了解吗?

我在 Windows 盒子上运行 MySQL 5.0.45。

谢谢

4

1 回答 1

7

在 MySQL 5.5 之前的版本中,不能将变量放入LIMITMySQL 存储过程的子句中。您必须将其插入字符串,然后将该字符串作为动态查询执行。

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;
于 2008-11-19T01:05:51.343 回答