MySQL Cursor nur eine Zeile abrufen
Meine SQL:
CREATE PROCEDURE INV_MIN_PURCHASE_PRICE()
BEGIN
DECLARE done INT;
DECLARE current_inventory_ID INT;
DECLARE cur1 CURSOR FOR SELECT inventory_ID FROM _inventory;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SET done = 0;
OPEN cur1;
REPEAT
FETCH cur1 INTO current_inventory_ID;
UPDATE _debug SET rows=rows+1;
UNTIL done
END REPEAT;
CLOSE cur1;
END;
Wenn ich rufe diese Prozedur von MySQL Holen nur eine Zeile (_debug rows
werden um 1 erhöht). Warum?? Ist es ein bug?
- schöne Frage.. also was ist die Lösung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte gerade das gleiche problem mit einer stored procedure in MySQL. Es sollte alle Datensätze aus einer Tabelle, die einen null-Wert in einer bestimmten Spalte, und füllen Sie dann den Wert aus einer anderen Tabelle. Jedoch hörte es nach einem Rekord:
Die Antwort ist, dass die "handler nicht gefunden" ist nicht nur ausgeführt, wenn der cursor keine Zeilen zurückgegeben, sondern auch dann, wenn der select auf Tabelle B keine Zeilen zurückgegeben. Meine Lösung war die Verwendung einer zweiten Variablen, die von dem hf, und setzen Sie die "fertig" - Variablen nach dem wählen:
Zusatz: Es ist natürlich möglich, das zu tun, ohne eine zweite variable einfach durch zurücksetzen des "fertig" - nach dem auswählen:
Haben Sie versucht, eine SCHLEIFE statt der REPEAT-Konstrukt? Scheint zu funktionieren besser in MySQL. Ersetzen Sie die WIEDERHOLEN Sie bis ENDE Abschnitt WIEDERHOLEN mit: