MySQL: sélection de plusieurs champs dans plusieurs variables dans une procédure stockée

106

Puis-je SELECT plusieurs colonnes en plusieurs variables dans la même requête de sélection dans MySQL?

Par exemple:

DECLARE iId INT(20);
DECLARE dCreate DATETIME;

SELECT Id INTO iId, dateCreated INTO dCreate 
FROM products
WHERE pName=iName;

Quelle est la syntaxe correcte pour cela?

un chasseur
la source

Réponses:

220

Votre syntaxe n'est pas tout à fait correcte: vous devez lister les champs dans l'ordre avant INTO, et les variables cibles correspondantes après:

SELECT Id, dateCreated
INTO iId, dCreate
FROM products
WHERE pName = iName
Martin Clayton
la source
6
+1. C'est un cas où la syntaxe T-SQL est plus claire. Les avoir en tant que listes séparées pose le même problème de maintenance que DECLARE CURSOR et FETCH (pas que je, euh, les utilise jamais).
harpo
Idem pour Pl / Sql également.
Aniket Thakur du
11

========== Conseiller ==========

@martin clayton La réponse est correcte, mais ce n'est qu'un conseil.

Veuillez éviter l'utilisation de variable ambiguë dans la procédure stockée.

Exemple :

SELECT Id, dateCreated
INTO id, datecreated
FROM products
WHERE pName = iName

L'exemple ci-dessus provoquera une erreur (erreur de valeur nulle)

L'exemple ci-dessous est correct. J'espère que cela a du sens.

Exemple :

SELECT Id, dateCreated
INTO val_id, val_datecreated
FROM products
WHERE pName = iName

Vous pouvez également les rendre sans ambiguïté en référençant le tableau, comme:

[Crédit: maganap ]

SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p 
WHERE pName = iName
sijo vijayan
la source
Vous pouvez également les rendre sans ambiguïté en référençant le tableau, comme:SELECT p.Id, p.dateCreated INTO id, datecreated FROM products p WHERE pName = iName
maganap
2

Alternativement à la réponse de Martin, vous pouvez également ajouter la partie INTO à la fin de la requête pour rendre la requête plus lisible:

SELECT Id, dateCreated FROM products INTO iId, dCreate
ibai
la source
@KusalDissanayake La question a été posée pour MySQL
ibai