MySQL Stored Procedure: Kann ich ein update direkt mit dem cursor?
Wahrscheinlich ist es eine wirklich einfache Frage, aber ich konnte nicht finden, eine Antwort darauf zu mir selbst:
Wenn ich einen cursor verweisen auf die Zeile, die ich aktualisieren möchten, gibt es einen schnelleren Weg, als eine UPDATE-Anweisung?
DECLARE current_id, current_product_id, current_price, current_position INT DEFAULT 0;
DECLARE new_position INT DEFAULT 0;
DECLARE cursor_offers CURSOR FOR
SELECT id, product_id, price, position FROM offers
ORDER BY product_id, price ASC;
OPEN cursor_offers;
offers_loop: LOOP
FETCH cursor_offers INTO current_id, current_product_id, current_price, current_position;
# Loop control omitted
# Conditional statements omitted, that calculate new_position
UPDATE offers SET position = new_position WHERE id = current_id; # <--- This line
END LOOP offers_loop;
Ich vermute, dass MySQL bereits einen Zeiger auf die Zeile über dem cursor ist, wäre es ineffizient, um es wieder zu finden in der UPDATE-Anweisung.
- Soweit ich weiß, wird der cursor für die Ergebnismenge, nicht die Tabelle selbst. Auch gibt es eine Menge mehr zu AKTUALISIEREN-ing eine Zeile, als nur zu wissen, wo es ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen die Dokumentation. Es sagt, dass Cursor schreibgeschützt und kann nicht aktualisiert werden.
Also ich würde sagen, es ist nicht möglich, direkte Aktualisierung über einen cursor. Müssen Sie eine update-Anweisung.