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?

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

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

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

@KusalDissanayake La question a été posée pour MySQL
ibai
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.