Question

Id aiment sélectionner une valeur unique dans une variable. Essayé de suivre Id:

DECLARE myvar INT(4);

-. Renvoie immédiatement une erreur de syntaxe

SELECT myvalue 
  FROM mytable 
 WHERE anothervalue = 1;

- renvoie un entier

SELECT myvalue 
  INTO myvar 
  FROM mytable 
 WHERE anothervalue = 1;

- ne fonctionne pas, aussi essayé @myvar

est possible d'utiliser DECLARE en dehors des procédures stockées ou fonctions?

Peut-être que je juste n'obtenir le concept de variables utilisateur ... Je viens d'essayer:

SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;

... qui a travaillé comme une manière supposés. Mais si je lance chaque requête à un moment je reçois juste NULL @var.

Était-ce utile?

La solution 2

A la fin d'une procédure stockée est la solution pour mon problème. Here's ce qui a aidé:

DELIMITER //
CREATE PROCEDURE test ()
  BEGIN
  DECLARE myvar DOUBLE;
  SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
  SELECT myvar;
  END
  //

DELIMITER ;

call test ();

Autres conseils

je suis tombé sur cette même question, mais je pense que je sais ce qui cause la confusion. Si vous utilisez MySql Analyseur de requêtes, vous pouvez le faire très bien:

SELECT myvalue 
INTO @myvar 
FROM mytable 
WHERE anothervalue = 1;

Cependant, si vous mettez cette même requête dans MySql Workbench, il lancera une erreur de syntaxe. Je ne sais pas pourquoi ils seraient différents, mais ils sont. Pour contourner le problème dans MySql Workbench, vous pouvez réécrire la requête comme ceci:

SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;

Ces réponses ne couvrent pas très bien plusieurs variables.

Faire l'affectation en ligne dans une procédure stockée provoque ces résultats aussi être renvoyés dans le resultset. Cela peut être source de confusion. D'utiliser la syntaxe SELECT ... INTO avec plusieurs variables que vous faites:

SELECT a, b INTO @a, @b FROM mytable LIMIT 1;

Le SELECT doit revenir seulement 1 ligne, donc LIMIT 1, bien que ce soit pas toujours nécessaire.

Vous pouvez également utiliser SET au lieu de DECLARE

SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);

SELECT myvar;

Par DECLARE la documentation MySQL fonctionne uniquement au début d'un bloc BEGIN ... END comme dans un programme enregistré.

Vous n'avez pas besoin de déclarer une variable dans MySQL. on détermine automatiquement quand il est tout d'abord affecté d'une valeur de type d'une variable. Son type peut être l'un: entier, décimal, à virgule flottante, chaîne binaire ou non binaire, ou la valeur NULL. Consultez la documentation Variables définies par l'utilisateur pour plus d'informations:

http://dev.mysql.com/doc/ refman / 5.0 / fr / user-variables.html

Vous pouvez utiliser SELECT ... INTO aux colonnes Assigner à une variable:

http://dev.mysql.com/ doc / refman / 5.0 / fr / select-en-statement.html

Exemple:

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)

Il convient de noter que, malgré le fait que vous pouvez SELECT INTO variables globales comme:

SELECT ... INTO @XYZ ...

Vous pouvez pas utiliser des variables globales de FETCH INTO comme:

FETCH ... INTO @XYZ

On dirait que ce n'est pas un bug rel="nofollow">. J'espère que ce sera utile à quelqu'un ...

J'utilise la version 6 (MySQL Workbench Community (GPL) pour Windows version 6.0.9 de révision 11421 build 1170) sur Windows Vista. Je n'ai aucun problème avec les options suivantes. Probablement ils ont fixé depuis ces gars-là ont des problèmes il y a trois ans.

/* 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';

Toutes les options ci-dessus me donne un résultat correct.

Vous manquez peut-être le symbole @ avant votre valeur, comme celle select 'test' INTO @myValue;

Pour ceux en cours d'exécution dans ces questions en ce moment, juste essayer de mettre un alias pour la table, cela devrait l'affaire, par exemple:

SELECT myvalue 
  INTO myvar 
  FROM mytable x
 WHERE x.anothervalue = 1;

Il a travaillé pour moi.

Vive.

scroll top