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 はエラーをスローします。しかし、ハードコードされた数値を OFFSET として使用すると、問題なく動作します。

誰かがこの主題に光を当てることができますか.

Windows ボックスで MySQL 5.0.45 を実行しています。

ありがとう

4

1 に答える 1

7

LIMIT5.5より前のMySQLでは、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;
于 2008-11-19T01:05:51.343 に答える