English 中文(简体)
在MySQL存储函数内使用变量作为SELECT语句中的偏移量。
原标题:
  • 时间:2008-11-19 00:48:12
  •  标签:

我对编写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 时,它就可以正常工作。

有人能解释一下这个话题吗?

我在Windows计算机上运行MySQL 5.0.45。

谢谢 (xiè xiè)

最佳回答

在MySQL 5.5之前,您不能将变量放入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;
问题回答

暂无回答




相关问题
热门标签