Die Verwendung von Variablen wie in SELECT-Anweisungen innerhalb mysql gespeicherten Funktionen OFFSET

StackOverflow https://stackoverflow.com/questions/300697

  •  08-07-2019
  •  | 
  •  

Frage

ich ganz neu bin, unterliegt der gespeicherten Funktion für mySQL Datenbank writting, daher bin ich nicht sicher, ob ich versuche, was ich hier zu tun möglich ist, überhaupt nicht.

Ich brauche eine Funktion, die eine Spalte aus zufälliger Zeile aus einer Tabelle zurück. Ich will nicht verwenden, um BY RAND () Methode, das zu tun, eher würde ich dies wie folgt tun:

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 wirft einen Fehler bei der Funktion mit dem Körper so zu schaffen. Aber wenn ich hart codierte Nummer verwenden, wie OFFSET es funktioniert gut.

Kann jemand etwas Licht auf das Thema werfen bitte.

Ich bin mit MySQL 5.0.45 auf Windows-Box.

Danke

War es hilfreich?

Lösung

In MySQL vor 5.5 können Sie eine Variable nicht in die LIMIT Klausel in MySQL Stored Procedures setzen. Sie haben es in einen String interpolieren und dann die Zeichenfolge als eine dynamische Abfrage ausführen.

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top