|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : août 2007 Messages : 4 ![]() |
Bonjour,
J'ai un probleme dans une procedure stockée qui contient une boucle while, cette derniere ne s'exute qu'une fois or le test est fait sur une variable decrementée de 4 vers 0. Je ne trouve pas l'erreur. Mercide m'aider je ne trouve rien sur le web ni sur les forums...SOS voici mon source : delimiter // CREATE PROCEDURE front_back.curetape3() BEGIN DECLARE done INT DEFAULT 0; DECLARE nbLigne INT; DECLARE a CHAR(100); DECLARE b char(100); DECLARE c CHAR(100); DECLARE d CHAR(100); DECLARE e CHAR(100); DECLARE f CHAR(100); DECLARE g CHAR(100); DECLARE h CHAR(100); DECLARE i CHAR(100); DECLARE j CHAR(100); DECLARE a1 CHAR(100); DECLARE b1 char(100); DECLARE c1 CHAR(100); DECLARE d1 CHAR(100); DECLARE e1 CHAR(100); DECLARE f1 CHAR(100); DECLARE g1 CHAR(100); DECLARE h1 CHAR(100); DECLARE i1 CHAR(100); DECLARE j1 CHAR(100); DECLARE cur1 CURSOR FOR SELECT num_operation,poste,nominal_1,nominal_2,valeur_taux_1,valeur_taux_2,base_1,base_2,periodicite_1, periodicite_2 FROM front_back.signessktp; DECLARE cur2 CURSOR FOR SELECT num_operation ,poste,nominal_1,nominal_2,valeur_taux_1,valeur_taux_2,base_1, base_2 ,periodicite_1,periodicite_2 FROM front_back.signatures_essentielles; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cur1; OPEN cur2; set nbLigne = 5; while nbLigne > 0 do select nbLigne; set nbLigne = nbLigne - 1; FETCH cur2 INTO a1,b1,c1,d1,e1,f1,g1,h1,i1,j1; REPEAT FETCH cur1 INTO a,b,c,d,e,f,g,h,i,j; if not done then IF trim(b)=trim(b1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '01', a1,a,concat(b,"=",b1) ; insert into etapes(etape_3) value(0); end if; IF trim(c)=trim(c1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '02' , a1,a,concat(c,"=",c1); insert into etapes(etape_3) select NUM_OPERATION from brice_operation; end if; IF trim(d)=trim(d1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '03', a1,a,concat(d,"=",d1); insert into etapes(etape_3) value(0); end if; IF trim(e)=trim(e1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '04', a1,a,concat(e,"=",e1); insert into etapes(etape_3) value(0); end if; IF trim(f)=trim(f1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '05', a1, a, concat(f,"=",f1); insert into etapes(etape_3) value(0); end if; IF trim(g)=trim(g1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '06', a1, a,concat(g,"=",g1); insert into etapes(etape_3) value(0); end if; IF trim(h)=trim(h1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '07', a1,a,concat(h,"=",h1); insert into etapes(etape_3) value(0); end if; IF trim(i)=trim(i1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '08', a1,a,concat(i,"=",i1); insert into etapes(etape_3) value(0); end if; IF trim(j)=trim(j1) THEN insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP, CODE_RETOUR_1) select '09', a1,a,concat(j,"=",j1); insert into etapes(etape_3) value(0); END IF; if not b=b1 and c=c1 and d=d1 and e=e1 and f=f1 and g=g1 and h=h1 and i=i1 and j=j1 then insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '99', a1,a; insert into etapes(etape_3) value(88); end if; end if; UNTIL done END REPEAT; end while; CLOSE cur1; CLOSE cur2; END // delimiter ; |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
à quoi sert ton SELECT ici ? une proc stock n'est censée avoir qu'un seul SELECT...
Code :
|
||
|
|
00
|
|
|
#3 | |||
|
Invité de passage
![]() Inscription : août 2007 Messages : 4 ![]() |
Citation:
Il me sert à voir si dans la boucle while il incrémente bien ou pas. Et malheureusement, ce n'est pas le cas. |
|||
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
et si tu le mets après le end while ?
|
|
|
00
|
|
|
#5 | |
|
Invité de passage
![]() Inscription : août 2007 Messages : 4 ![]() |
Citation:
|
|
|
|
00
|
|
|
#6 | |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Citation:
|
|
|
|
00
|
|
|
#7 | |
|
Invité de passage
![]() Inscription : août 2007 Messages : 4 ![]() |
Citation:
Voici mon nouveau code: delimiter // CREATE PROCEDURE front_back.curetape3() BEGIN DECLARE done INT DEFAULT 0; DECLARE a1 CHAR(100); DECLARE b1 char(100); DECLARE c1 CHAR(100); DECLARE d1 CHAR(100); DECLARE e1 CHAR(100); DECLARE f1 CHAR(100); DECLARE g1 CHAR(100); DECLARE h1 CHAR(100); DECLARE i1 CHAR(100); DECLARE j1 CHAR(100); DECLARE cur1 CURSOR FOR SELECT num_operation ,poste,nominal_1,nominal_2,valeur_taux_1,valeur_taux_2,base_1, base_2 ,periodicite_1,periodicite_2 FROM front_back.signatures_essentielles; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cur1; REPEAT FETCH cur1 INTO a1,b1,c1,d1,e1,f1,g1,h1,i1,j1; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '01', a1, num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON b1 = se.poste_bis where a1 and se.num_operation_bis is not NULL; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '02', a1, num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON c1 = se.nominal_1_bis where a1 and se.num_operation_bis is not NULL; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '03', a1, num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON d1 = se.nominal_2_bis where a1 and se.num_operation_bis is not NULL; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '04', a1, num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON e1 = se.valeur_taux_1_bis where a1 and se.num_operation_bis is not NULL; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '05', a1, num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON f1 = se.valeur_taux_2_bis where a1 and se.num_operation_bis is not NULL; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '06', a1, num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON g1 = se.base_1_bis where a1 and se.num_operation_bis is not NULL; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '07', a1, num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON h1 = se.base_2_bis where a1 and se.num_operation_bis is not NULL; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '08', a1,num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON i1 = se.periodicite_1_bis where a1 and se.num_operation_bis is not NULL; insert into table_stockage(ERREUR_CONSTATEE, NUM_DOSSIER_BRICE,NUM_DOSSIER_KTP) select '09', a1,num_operation_bis FROM signessktp as se RIGHT OUTER JOIN signatures_essentielles as s ON j1 = se.periodicite_2_bis where a1 and se.num_operation_bis is not NULL; insert into etapes(etape_3) value(0); UNTIL done END REPEAT; CLOSE cur1; END // delimiter ; merci d'avance pour votre aide! |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com