Deseo hacer algo que parece un poco complicado en MySQL. De hecho, deseo abrir un cursor, hacer un bucle, y en este bucle, abrir un segundo cursor usando los datos de la búsqueda anterior para ser ejecutado, y volver a repetir los resultados.Varios cursores en bucles anidados en MySQL
DECLARE idind INT;
DECLARE idcrit INT;
DECLARE idindid INT;
DECLARE done INT DEFAULT 0;
DECLARE done2 INT DEFAULT 0;
DECLARE curIndicateur CURSOR FOR SELECT id_indicateur FROM indicateur;
DECLARE curCritereIndicateur CURSOR FOR SELECT C.id_critere FROM critere C where C.id_indicateur=idind;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
set idindid=54;
OPEN curIndicateur;
REPEAT
FETCH curIndicateur INTO idind;
open curCritereIndicateur;
REPEAT
FETCH curIndicateur INTO idcrit;
INSERT INTO SLA_DEMANDE_STATUS (iddemande,idindicateur,indicateur_status,progression) values('0009',idcrit,'OK',10.0);
UNTIL done END REPEAT;
close curCritereIndicateur;
UNTIL done END REPEAT;
CLOSE curIndicateur;
De hecho, la forma de hacerlo 'hasta que esté hecho' de forma diferente para los dos cursores, porque sólo se puede declarar un manejador para SQLSTATE? Si la primera termina, la segunda termina también.
Th at es casi siempre la forma incorrecta de hacer las cosas, y posiblemente ineficaz para arrancar. Combina las dos operaciones de selección en una declaración (y, por lo tanto, usa solo un ciclo); normalmente será más eficiente. –
Tiene una tasa baja. Importante en SO, debe marcar las respuestas aceptadas utilizando la marca de la izquierda de la respuesta publicada, debajo de la votación. Esto aumentará tu tasa. Vea cómo funciona esto visualizando este enlace: http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work#5235 – Pentium10