J'ai deux entrées pour ma procédure stockée. L'un est le «RoleDid» et la deuxième est le «Menuids». Les «menusids» sont une liste des identifiants de menus séparés par des virgules devant être insérés avec RoleDid. Rolid est juste une INT et nous devons mettre ce roledid contre chaque menuid. My Table 'Rolesmenus' contient deux colonnes une pour menuID et une pour leur rôle motivé. p>
Maintenant, j'ai besoin de diviser les Menuids et d'insérer chaque menuID avec pilotage. p>
Comment puis-je écrire une procédure stockée pour cela? P>
5 Réponses :
AFAIK MYSQL fait
Donnez-le. Il peut avoir besoin de quelque réslefing si la chaîne de Menuids ne correspond pas à "Menuid, Menuid, MenuID".
Je ne sais pas ce que les données sont saisies la colonne MENUID dans votre table cible (int?) Vous devez donc avoir à mettre Une vérification numérique elle-même (au cas où '1,2,3, banane, 4,5' est transmise en tant que paramètre d'entrée Menuids). P>
DELIMITER $$ DROP PROCEDURE IF EXISTS `insert_role_menuids`$$ CREATE PROCEDURE `insert_role_menuids`(IN RoleID INT,IN MenuIDs varchar(500)) BEGIN declare idx,prev_idx int; declare v_id varchar(10); set idx := locate(',',MenuIDs,1); set prev_idx := 1; WHILE idx > 0 DO set v_id := substr(MenuIDs,prev_idx,idx-prev_idx); insert into RolesMenus (RoleId,MenuId) values (RoleID,v_id); set prev_idx := idx+1; set idx := locate(',',MenuIDs,prev_idx); END WHILE; set v_id := substr(MenuIDs,prev_idx); insert into RolesMenus (RoleId,MenuId) values (RoleID,v_id); END$$ DELIMITER ;
Excellente procédure pour convertir une chaîne séparée par ',' à table!
Vous pouvez créer une requête d'insertion (car l'instruction permet d'insérer plusieurs enregistrements) et de l'exécuter avec déclarations préparées , par exemple - Comme vous le voyez, cela peut être fait sans procédure stockée. p> p>
Pour cette solution, vous devez créer une table avec le nom Splitd_Table, il peut avoir un identifiant (Autooincrerement) si vous en avez besoin et doit avoir une colonne où stocker la valeur (je l'appelle la valeur de la valeur)
première création de procédure appelez p>