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.