SELECT INTO Variable in MySQL DECLARE verursacht Syntaxfehler?
-
28-09-2019 - |
Frage
Id gerne einen einzelnen Wert in eine Variable wählen. Id versucht, folgende:
DECLARE myvar INT(4);
-. Sofort gibt einige Syntaxfehler
SELECT myvalue
FROM mytable
WHERE anothervalue = 1;
- gibt eine einzelne ganze Zahl
SELECT myvalue
INTO myvar
FROM mytable
WHERE anothervalue = 1;
- nicht funktioniert, auch versucht @myvar
Ist möglich DECLARE außerhalb von gespeicherten Prozeduren oder Funktionen zu benutzen?
Vielleicht nur nicht, daß ich das Konzept der Benutzervariablen ... Ich habe gerade versucht:
SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;
... das war wie Es ist sollte. Aber wenn ich jede Abfrage zu einem Zeitpunkt ausgeführt ich nur @var NULL erhalten.
Lösung 2
Am Ende einer gespeicherten Prozedur war die Lösung für mein Problem. Heres, was geholfen:
DELIMITER //
CREATE PROCEDURE test ()
BEGIN
DECLARE myvar DOUBLE;
SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
SELECT myvar;
END
//
DELIMITER ;
call test ();
Andere Tipps
Ich lief in das gleiche Problem, aber ich glaube, ich weiß, was die Verwirrung verursacht. Wenn Sie MySQL Query Analyzer verwenden, können Sie diese einfach gut tun:
SELECT myvalue
INTO @myvar
FROM mytable
WHERE anothervalue = 1;
Wenn Sie jedoch die gleiche Abfrage in MySQL Workbench setzen, wird es einen Syntaxfehler werfen. Ich weiß nicht, warum sie anders wäre, aber sie sind. Um Arbeit, um das Problem in MySQL Workbench können Sie die Abfrage wie folgt umschreiben:
SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;
Diese Antworten nicht sehr gut mehrere Variablen.
Dadurch könnte die Inline-Zuordnung in einer gespeicherten Prozedur bewirkt, dass diese Ergebnisse auch in dem Suchresultates zurückgeschickt werden. Das kann verwirrend sein. Um die SELECT mit ... INTO-Syntax mit mehreren Variablen, die Sie tun:
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
Die SELECT darf nur 1 Zeile zurückgeben, daher LIMIT 1, obwohl dies nicht immer erforderlich ist.
Sie können auch SET anstelle von DECLARE
SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);
SELECT myvar;
der MySQL-Dokumentation DECLARE funktioniert nur am Anfang von BEGIN ... END-Block wie in einem gespeicherten Programm.
Sie haben nicht eine Variable in MySQL verzollen müssen. Ein Variablentyp wird automatisch bestimmt, wenn es zuerst einen Wert zugewiesen wird. Ganzzahl, Dezimal- Gleitkommazahlen, binäre oder nichtbinäre String oder NULL-Wert: Its Typ kann einer der folgenden sein. Finden Sie in der Benutzervariablen-Dokumentation Weitere Informationen:
http://dev.mysql.com/doc/ refman / 5.0 / de / user-variables.html
Sie können mit SELECT ... INTO zu assign Spalten zu einer Variablen:
http://dev.mysql.com/ doc / refman / 5.0 / de / select-in-statement.html
Beispiel:
mysql> SELECT 1 INTO @var;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT @var;
+------+
| @var |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
Es ist erwähnenswert, dass trotz der Tatsache, dass Sie globale Variablen wie SELECT INTO
können:
SELECT ... INTO @XYZ ...
Sie können nicht Verwendung FETCH INTO
globale Variablen wie:
FETCH ... INTO @XYZ
Sieht aus wie es ist kein Fehler . Ich hoffe, es wird hilfreich sein für jemanden ...
Ich bin mit der Version 6 (MySQL Workbench Gemeinschaft (GPL) für Windows Version 6.0.9 Revision 11421 Build 1170) unter Windows Vista. Ich habe kein Problem mit den folgenden Optionen. Wahrscheinlich fixierte sie es, da diese Jungs vor, die Probleme 3 Jahre bekommen.
/* first option */
SELECT ID
INTO @myvar
FROM party
WHERE Type = 'individual';
-- get the result
select @myvar;
/* second option */
SELECT @myvar:=ID
FROM party
WHERE Type = 'individual';
/* third option. The same as SQL Server does */
SELECT @myvar = ID FROM party WHERE Type = 'individual';
Alle Option oben geben Sie mir ein korrektes Ergebnis.
Sie verpassen vielleicht das Symbol @ vor Ihrem Wert, wie die select 'test' INTO @myValue
;
Für die jetzt in solchen Fragen laufen, versuchen Sie einfach einen Alias ??für den Tisch zu legen, sollte dies der Trick, z:
SELECT myvalue
INTO myvar
FROM mytable x
WHERE x.anothervalue = 1;
Es funktionierte für mich.
Prost.