Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1746 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Mysql procedure stockee : boucle infinie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mysql procedure stockee : boucle infinie

n°2117537
Barnabe42
Posté le 20-12-2011 à 18:20:45  profilanswer
 

Bonjour,
 
Mon petit code pl sql (avec mysql) me fait une boucle infini (qd je fais call ma_procedure ca ne s'arrete pas  :cry: ) :
 
Le code :

Code :
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS `liferay_ce606_solfea`.`remove_leading_slash` $$
  3. CREATE PROCEDURE `liferay_ce606_solfea`.`remove_leading_slash` ()
  4. BEGIN
  5. --debut code perso
  6. DECLARE done INT DEFAULT 0;
  7. DECLARE a INT(11);
  8. DECLARE b CHAR(255);
  9. DECLARE cur1 CURSOR FOR SELECT d.idFormData,d.value FROM solfea_form_data d WHERE d.value REGEXP '^/';
  10. DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  11. OPEN cur1;
  12. REPEAT
  13.     FETCH cur1 INTO a,b;
  14. IF NOT done THEN
  15. update solfea_form_data set value=SUBSTRING(b,1) where idFormData=a;
  16. END IF;
  17. UNTIL done END REPEAT;
  18. CLOSE cur1;
  19. --fin code perso
  20. END $$
  21. DELIMITER ;


 
 
Je n'ai codé que ce qui est en "--debut/fin code perso". Le reste, c'est le squelette généré par l'éditeur officiel "mysql browser".
Pouvez-vous me dire où est la boucle infinie sachant que la requête executée :
 

Code :
  1. SELECT d.idFormData,d.value FROM solfea_form_data d WHERE d.value REGEXP '^/';


 
renvoie 17 lignes (elle marche bien).
 
Merci  ;)


Message édité par Barnabe42 le 20-12-2011 à 18:21:49
mood
Publicité
Posté le 20-12-2011 à 18:20:45  profilanswer
 

n°2117538
Barnabe42
Posté le 20-12-2011 à 18:30:23  profilanswer
 

J'ai essaié en codant comme sur la doc, et j'ai toujours cette boucle infinie :
 
Code :
 

Code :
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS `liferay_ce606_solfea`.`remove_leading_slash2` $$
  3. CREATE PROCEDURE `liferay_ce606_solfea`.`remove_leading_slash2` ()
  4. BEGIN
  5.   DECLARE done INT DEFAULT 0;
  6. DECLARE a INT(11);
  7. DECLARE b CHAR(255);
  8. DECLARE cur1 CURSOR FOR SELECT d.idFormData,d.value FROM solfea_form_data d WHERE d.value REGEXP '^/';
  9. DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  10. OPEN cur1;
  11.   read_loop: LOOP
  12.     FETCH cur1 INTO a, b;
  13.     IF done THEN
  14.       LEAVE read_loop;
  15.     END IF;
  16.     update solfea_form_data set value=SUBSTRING(b,1) where idFormData=a;
  17.   END LOOP;
  18.   CLOSE cur1;
  19. END $$
  20. DELIMITER ;


 
 
Exemple officiel: http://dev.mysql.com/doc/refman/5.0/en/cursors.html


---------------
Asus Z87-A, Core i7 4790K@Stock, G.Skill 4x8Go 2800MHz CL12, Nvidia GTX 980@1178/1752, Asus PB287Q 4K@60Hz | CPU-Z validator | Post image
n°2117540
Barnabe42
Posté le 20-12-2011 à 18:49:28  profilanswer
 

Bon c l'éditeur qui est buggé...par ligne de commande ça marche.
 
Merci  :jap:


---------------
Asus Z87-A, Core i7 4790K@Stock, G.Skill 4x8Go 2800MHz CL12, Nvidia GTX 980@1178/1752, Asus PB287Q 4K@60Hz | CPU-Z validator | Post image
n°2117726
Oliiii
Posté le 21-12-2011 à 16:05:28  profilanswer
 

nan mais sinon ya moyen de faire le meme update sans curseur.
 
A vue de nez un truc comme ca:
update solfea_form_data set value=SUBSTRING(value,1) where value REGEXP '^/';


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Mysql procedure stockee : boucle infinie

 

Sujets relatifs
PB export dans MySQL[MYSQL] Date du jour - 1
[Shell/Unix] Reactualisation de variable dans une boucleinsertion de données csv dans mysql
Menu déroulant PHP et MySQL[MySQL] Urgent, PB export dans la BDD !
Script PHPNom d'une procédure comme jdoc:
Appel de procédure : variable non renvoyéeprobleme importation .CSV vers MySQL
Plus de sujets relatifs à : Mysql procedure stockee : boucle infinie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR