2009-09-16 9 views
6

Existe-t-il un moyen dans un script MySQL de déclarer un tableau (ou une collection) et de faire une boucle pour faire des choses?Variable de tableau dans mysql

Par exemple,

SET @myArrayOfValue=[2,5,2,23,6] 


for each @value in @myArrayOfValue 
    INSERT INTO EXEMPLE VALUES(@value, 'hello'); 
end for each 
+4

Dans quelles circonstances du monde réel pourriez-vous le faire? Si le tableau provient d'une instruction SELECT, alors vous devriez juste INSERT ... SELECT. Si le tableau provient de votre application, alors vous devriez INSERER DANS VALEURS EXEMPLES (@value, 2), (@ value, 5), (@ value, 2) ... – longneck

+3

Je veux juste faire un script de maintenance pour ajouter de nouvelles valeur. Au lieu de faire un copier coller de chaque insert, je voudrais créer une liste au début du script. Les gens n'auront pas à lire tout le script pour savoir quoi modifier, mais seulement la variable au début. – Mike

+0

@longneck, Demandez aux visiteurs de 16k sur cette page, plus les 67k visiteurs sur http://stackoverflow.com/q/12176709/632951 pour des circonstances réelles où vous feriez cela. – Pacerier

Répondre

2

Non, SQL ne supporte pas POUR CHAQUE/etc syntaxe. Le plus proche que vous obtiendriez serait d'utiliser des curseurs. En outre, il n'y a pas de syntaxe de tableau dans SQL - vous auriez à utiliser:

SELECT 2 FROM DUAL 
UNION ALL 
SELECT 34 FROM DUAL 
UNION ALL 
SELECT 24 FROM DUAL 

... à construire votre « tableau de valeurs » équivalent en SQL.

Les scripts SQL ont des instructions INSERT individuelles. Vous seriez en train d'utiliser PHP/Java/etc. pour utiliser la syntaxe FOR loop-esque comme ce qui est fourni dans votre exemple.

+0

Cela ne me dérange pas d'utiliser un curseur, mais les valeurs doivent provenir de quelque chose comme ceci SET @monValeurs [2,34,22]. Thanx – Mike

+0

Merci, c'est ce que je cherchais. La syntaxe est trop moche à utiliser mais elle a répondu à ma question. – Mike

0

Pourriez-vous utiliser quelque chose comme MySQL SET? Au lieu de boucler, vous pouvez stocker les valeurs dans un SET.

+0

Non, je ne peux pas, j'ai besoin d'insérer des valeurs dans différentes lignes. Je veux faire ceci pour avoir un script facile à utiliser. – Mike

+0

Utilisez PHP (ou quelque chose) et bouclez à travers chacun des tableaux et faites simplement une insertion simple puis –

+0

j'en ai besoin dans un script mySQL. – Mike

Questions connexes