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.
InformationsquelleAutor Jan | 2012-07-29
Schreibe einen Kommentar