MySQL Prozedur: Continue Handler in Verbindung mit Cursor

bobo95

Neuer Benutzer
Beiträge
1
Hallo, bin ganz neu hier im Forum und habe direkt ein Anliegen:
Ich muss für die Uni eine Prozedur schreiben und bin bisher auch relativ weit gekommen, stehe aber jetzt vor einem Problem, welches mit dem Continue Handler zusammenhängt.
Hier erst mal meine Prozedur:

Code:
DELIMITER //
CREATE PROCEDURE nachbestellung_zusammenstellen()
BEGIN
  DECLARE done BOOLEAN DEFAULT false;
  DECLARE cur_bestand INT DEFAULT 0;
  DECLARE current_art VARCHAR(13);
  DECLARE cur_preis DECIMAL(4,2) DEFAULT 0.0;
  DECLARE cur_best_anzahl INT DEFAULT 0;
  DECLARE bereits_vorhanden BOOLEAN DEFAULT 0;
  DECLARE cur CURSOR FOR
    SELECT DISTINCT a_nr FROM medienartikel;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := true;
  OPEN cur;
  REPEAT
    FETCH cur INTO current_art;
    IF NOT done THEN
      SET cur_bestand = 0;
      SET cur_preis = 0.0;
      SELECT COUNT(*) INTO bereits_vorhanden FROM nachbestellen WHERE a_nr = current_art COLLATE utf8_general_ci;
      SELECT bestand INTO cur_bestand FROM lagerbestand WHERE a_nr = current_art COLLATE utf8_general_ci;
      SELECT preis INTO cur_preis FROM angebot WHERE a_nr = current_art COLLATE utf8_general_ci ORDER BY datum DESC LIMIT 1;
      IF (cur_preis > 6) THEN
        -- teuerer als 6 € --> 10 Artikel im Lager
        SET cur_best_anzahl = 5 - cur_bestand;
      ELSE
        -- billiger als 6 € --> 5 Artikel im Lager
        SET cur_best_anzahl = 10 - cur_bestand;
      END IF;
      IF (cur_best_anzahl > 0) THEN
        IF NOT bereits_vorhanden THEN
          INSERT INTO nachbestellen(a_nr, best_anzahl) VALUES (current_art, cur_best_anzahl);
        END IF;
      END IF;
    END IF;
  UNTIL done
  END REPEAT;
  CLOSE cur;
END;
//

Mein Continue Handler soll solange Werte von meinem Cursor lesen, bis dieser keine mehr hat....
Aber der Handler springt bereits bei folgender Zeile raus,
Code:
      SELECT bestand INTO cur_bestand FROM lagerbestand WHERE a_nr = current_art COLLATE utf8_general_ci;
weil in dieser ein leeerer Result (Kein Datensatz vorhanden) zurückgegeben wird...
Mein Ziel ist eigentlich, dass genau in diesem Fall die Zahl 0 in die Variable "cur_bestand" geladen wird, was auch passiert, nur wird der Handler anscheinend benachrichtigt, dass ein leeres Resultset gefunden wurde und springt direkt aus meiner Schleife heraus...
Kann ich den Handler irgendwie umstellen, dass dieser lediglich auf den Cursor achtet?
Schon mal vielen Dank für die Hilfe ! :D
 
Werbung:
Oben