12

Wenn ich die gespeicherte Prozedur erstellen, kann ich einige Variable ja erstellen? zum Beispiel:Setzen Sie das variable Ergebnis, aus der Abfrage

CREATE PROCEDURE `some_proc`() 
BEGIN 

    DECLARE some_var INT; 
    SET some_var = 3; 
.... 

FRAGE: aber wie variable Ergebnis aus der Abfrage zu setzen, das ist, wie einige, wie dies zu machen:

DECLARE some_var INT; 
SET some_var = SELECT COUNT(*) FROM mytable ; 

?

+0

Siehe hier, Ihre Frage ist möglich, duplizieren. http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 – bodi0

+1

Nein, nicht wirklich ein Duplikat. Das Thema http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 ist "benutzerdefinierte Variablen". Diese Frage bezieht sich auf lokale Variablen für gespeicherte Prozeduren. Die Syntax in meiner Antwort funktioniert auch für benutzerdefinierte Variablen, aber nicht umgekehrt. –

Antwort

33

Es gibt mehrere Möglichkeiten, dies zu tun.

Sie eine Unterabfrage verwenden können:

SET some_var = (SELECT COUNT(*) FROM mytable); 

(wie die original, nur Klammer um die Abfrage hinzufügen)

oder die SELECT INTO-Syntax mehrere Werte zuweisen verwenden:

SELECT COUNT(*), MAX(col) 
INTO some_var, some_other_var 
FROM tab; 

Die Syntax der Unterabfrage ist etwas schneller (ich weiß nicht warum), funktioniert aber nur, um einen einzelnen Wert zuzuweisen. Mit der Auswahl in Syntax können Sie mehrere Werte gleichzeitig festlegen. Wenn Sie also mehrere Werte aus der Abfrage abrufen möchten, sollten Sie dies tun, anstatt die Abfrage für jede Variable erneut auszuführen.

Wenn Ihre Abfrage schließlich keine einzelne Zeile, sondern eine Ergebnismenge zurückgibt, können Sie eine cursor verwenden.

+0

Sie sind falsch. –

+0

Roland Bouman, vielen Dank, Ihre zweite Variante funktioniert, aber zuerst nicht, Klammern helfen nicht. :) –

+0

Nein beide funktionieren. Sie müssen einen Syntaxfehler gemacht haben. mysql> delimiter // mysql> create function f() -> gibt int zurück -> beginne -> deklariere v int; -> set v = (wählen Sie Anzahl (*) von Dual); -> Rückkehr v; -> Ende; -> // Abfrage OK, 0 Zeilen betroffen (0.05 Sek.) mysql> select f(); -> // + ------ + | f() | + ------ + | 1 | + ------ + 1 Reihe im Satz (0,00 Sek.) mysql> select version(); -> // + ----------- + | Version() | + ----------- + | 5.5.20 | + ----------- + 1 Reihe im Satz (0.00 sec) –

3

Die folgende Auswahlanweisung sollte es Ihnen ermöglichen, das Ergebnis von count (*) zu speichern.

SELECT COUNT(*) FROM mytable INTO some_var; 
+2

Mit MySQL können Sie die INTO-Klausel als letzte Klausel am Ende der Anweisung festlegen. In Standard-SQL erscheint es jedoch zwischen der SELECT- und der FROM-Klausel. –

+0

juergen d, vielen Dank. :) –