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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top