web-dev-qa-db-fra.com

Définir le résultat variable, à partir de la requête

Lorsque je crée la procédure enregistrée, je peux créer une variable oui? par exemple:

CREATE PROCEDURE `some_proc` ()  
BEGIN  

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

QUESTION: mais comment définir le résultat variable à partir de la requête, c'est comment en faire comme ceci:

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

?

Il existe plusieurs façons de procéder.

Vous pouvez utiliser une sous-requête:

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

(comme votre original, ajoutez simplement des parenthèses autour de la requête)

ou utilisez la syntaxe SELECT INTO pour attribuer plusieurs valeurs:

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

La syntaxe de la sous-requête est légèrement plus rapide (je ne sais pas pourquoi) mais ne fonctionne que pour attribuer une seule valeur. La syntaxe select into vous permet de définir plusieurs valeurs à la fois, donc si vous avez besoin de récupérer plusieurs valeurs de la requête, vous devez le faire plutôt que d'exécuter la requête encore et encore pour chaque variable.

Enfin, si votre requête ne renvoie pas une seule ligne mais un jeu de résultats, vous pouvez utiliser un curseur .

49
Roland Bouman

L'instruction select suivante devrait vous permettre d'enregistrer le résultat du compte (*).

SELECT COUNT(*) FROM mytable INTO some_var;
8
juergen d