Mysql procedure stockee : boucle infinie

Mysql procedure stockee : boucle infinie - SQL/NoSQL - Programmation

Marsh Posté le 20-12-2011 à 18:20:45    

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
Reply

Marsh Posté le 20-12-2011 à 18:20:45   

Reply

Marsh Posté le 20-12-2011 à 18:30:23    

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
Reply

Marsh Posté le 20-12-2011 à 18:49:28    

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
Reply

Marsh Posté le 21-12-2011 à 16:05:28    

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 '^/';

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed