SELECT INTO Variable dans MySQL DECLARE provoque une erreur de syntaxe?

Je voudrais sélectionner une valeur unique dans une variable. J’ai essayé de suivre:

DECLARE myvar INT(4); 

– renvoie immédiatement une erreur de syntaxe.

 SELECT myvalue FROM mytable WHERE anothervalue = 1; 

– renvoie un entier unique

 SELECT myvalue INTO myvar FROM mytable WHERE anothervalue = 1; 

– ne fonctionne pas, a également essayé @myvar

Est-il possible d’utiliser DECLARE en dehors des procédures ou des fonctions stockées?

Peut-être que je ne comprends pas le concept de variables utilisateur … J’ai juste essayé:

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

… qui a fonctionné comme il est censé le faire. Mais si je lance chaque requête à la fois, je reçois juste @var NULL.

J’ai rencontré ce même problème, mais je pense savoir ce qui cause la confusion. Si vous utilisez MySql Query Analyzer, vous pouvez le faire correctement:

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

Toutefois, si vous placez cette même requête dans MySql Workbench, une erreur de syntaxe est générée. Je ne sais pas pourquoi ils seraient différents, mais ils le 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; 

À la fin, une procédure stockée était la solution à mon problème. Voici 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 (); 

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

L’affectation en ligne dans une procédure stockée entraîne l’envoi de ces résultats dans le jeu de résultats. Cela peut être déroutant. Pour utiliser la syntaxe SELECT … INTO avec plusieurs variables que vous faites:

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

Le SELECT ne doit renvoyer qu’une ligne, donc LIMIT 1, bien que ce ne 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; 

Pour les documents MySQL, DECLARE ne fonctionne qu’au début d’un bloc BEGIN … END comme dans un programme stocké.

Vous n’avez pas besoin de déclarer une variable dans MySQL. Le type d’une variable est déterminé automatiquement lors de la première atsortingbution d’une valeur. Son type peut être l’un des suivants: entier, décimal, virgule flottante, chaîne binary ou non binary ou valeur NULL. Voir la documentation Variables définies par l’utilisateur pour plus d’informations:

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

Vous pouvez utiliser SELECT … INTO pour affecter des colonnes à une variable:

http://dev.mysql.com/doc/refman/5.0/fr/select-into-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 est à noter que malgré le fait que vous pouvez sélectionner des variables globales comme:

SELECT ... INTO @XYZ ...

Vous ne pouvez PAS utiliser les variables globales FETCH INTO comme:

FETCH ... INTO @XYZ

On dirait que ce n’est pas un bug . J’espère que cela sera utile à quelqu’un …

J’utilise la version 6 (Communauté MySQL Workbench (GPL) pour Windows version 6.0.9 révision 11421 version 1170) sous Windows Vista. Je n’ai aucun problème avec les options suivantes. Ils ont probablement réparé le problème depuis que ces gars ont eu les 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 donnent un résultat correct.

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

Pour ceux qui travaillent actuellement sur de tels problèmes, essayez simplement de mettre un alias pour la table, cela devrait être le cas, par exemple:

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

Cela a fonctionné pour moi.

À votre santé.