Est-il une liste de type de données dans MySQL procédures stockées, ou un moyen de les imiter?

StackOverflow https://stackoverflow.com/questions/8795

  •  08-06-2019
  •  | 
  •  

Question

Je voudrais créer une procédure stockée dans le serveur MySQL qui a eu une liste en argument.Par exemple, disons que je voudrais être en mesure de mettre plusieurs balises pour un élément dans un appel, puis ce que je veux faire est de définir une procédure qui prend l'ID de l'élément et une liste de mots pour la définir.Cependant, je n'arrive pas à trouver de toute façon pour ce faire, il n'y a pas de liste type de données, pour autant que je suis au courant, mais peut-il être émulé en quelque sorte?Pourrait la liste des tags être une chaîne séparée par des virgules, qui peuvent en quelque sorte être divisé et en boucle sur?

Comment avez-vous l'habitude de travailler avec des listes dans MySQL procédures stockées?

Était-ce utile?

La solution

Cette article a une bonne discussion sur le problème de l'analyse d'un tableau à une procédure stockée depuis procédures stockées permettent seulement valide colonne de la table de données-types de paramètres.

Il y a bien des choses que vous pouvez faire avec la csv type de table dans mysql - c'est si vous êtes le chargement d'un fichier plat dans la db.

Vous pouvez créer une table temporaire dans la procédure stockée, itérer sur les csv liste et l'insérer à la table temporaire, créer un curseur qui sélectionne les valeurs de la table.Cette réponse dans le ci-dessus mentionné fil de discussion montre une façon de le faire.

En général, je voudrais diviser le tableau avant d'en arriver à la base de données et ensuite effectuer la requête individuellement sur chaque élément.

Autres conseils

Selon le degré de complexité que vous voulez obtenir, vous pouvez utiliser un générique de la table de liaison.Pour l'une de mes applications il y a plusieurs rapports où l'utilisateur peut choisir, par exemple une liste de clients pour exécuter le rapport sur plutôt que juste un seul client à partir d'une liste déroulante.J'ai une table séparée avec 2 champs:

  • Id unique (guid)
  • ItemID

Le pseudo-code ressemble à ceci:

GUID guid = GenerateGUID()
try
  for each customer in customerList { INSERT(guid, customerId) }
  ExecuteSQLPocedure(guid)
  --the procedure can inner-join to the list table to get the list
finally
  DELETE WHERE UniqueID=guid      

Dans mon langage de programmation de Choix, C#, en fait, je le faire dans l'application elle-même, car la fonction split() les fonctions et les boucles sont plus faciles à programmer en C#, SQL, Cependant!

Peut-être que vous devriez regarder SubString_Index() fonction.

Par exemple, ce qui suit le retour de google:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.google.com', '.', -2), '.', 1);

Vous ne savez pas si ces travaillera spécifiquement dans une SP, mais il y a ENUM et de DÉFINIR les types de données dans MySQL 5 qui peut faire ce que vous avez besoin.http://dev.mysql.com/doc/refman/5.0/en/enum.html http://dev.mysql.com/doc/refman/5.0/en/set.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top