Announcement

Collapse
No announcement yet.

Loop- Schleife zeigt Fehler

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Loop- Schleife zeigt Fehler

    Die Beschreibung zum Trigger ist :

    Dieser Trigger ist für die Bewertung unserer Hotels zuständig, der die Bewertungen der Kunden speichert und diese dementsprechend hoch und runterzählt mit der jeweiligen Bewertung. Jeder Kunde kann einmal seine Bewertung Bewertung fließt dann in die Gesamtbewertung der Hotel hinein. Je nach Bewertung des Kunden kann die Gesamtbewertung positiver oder negativer werden.

    Code:

    CREATE OR REPLACE TRIGGER Durchschnittsbewertung
    after insert on bewertung
    for each row
    DECLARE
    counter number default 0;
    vStern number default 0;
    vSterne number default 0;
    vAnzahl number default 0;
    vBewAnzahl number default 0;
    vDurchschnittsbewertung decimal(19,2) default 0;
    msg VARCHAR (128);

    cursor cBewertungen is

    select Stern from Bewertung
    where hotel_id = new.hotel_id;

    declare continue handler for not found set counter = 1;

    open cBewertungen;

    Durchschnittsbewertung : loop

    fetch cBewertungen into vStern;

    if counter = 1 then
    leave Durchschnittsbewertung;
    end if;

    set vSterne = vSterne + vStern;
    set vAnzahl = vAnzahl + 1;

    end loop Durchschnittsbewertung;

    set vDurchschnittsbewertung = vSterne / vAnzahl;

    update hotel
    set Durchschnittsbewertung = vDurchschnittsbewertung
    where hotel_id = new.hotel_id;

    select count(Stern) into vBewAnzahl from Bewertung;

    close cBewertungen;

    end ;

    Fehler sind:

    20/24 PLS-00103: Fand das Symbol "" als eines der folgenden erwartet wurde: constant exception <an identifier> <a double-quoted delimited-identifier> table columns long double ref char time timestamp interval date binary national character nchar
    20/24 PLS-00049: Ungültige Bind-Variable 'LOOP'


    Könnt ihr mir bitte behilflich sein ?
    Zuletzt editiert von Christian Marquardt; 24.05.2020, 15:37.

  • #2
    Prüfe den Schleifenaufbau
    Ein Label wird mit << und >> definiert
    <<Durchschnittsbewertung>> loop

    Die Zuweisung zu Variablen erfolgt mit
    vSterne := vSterne + vStern;
    vAnzahl := vAnzahl + 1;

    ....
    vDurchschnittsbewertung:= vSterne / vAnzahl;
    Christian

    Comment


    • #3
      Danke für deine Antwort. das war wirklich hilfreich.
      Aber jetzt zeigt der hier ein fehler:

      declare continue handler for not found set counter = 1;

      mit dem Fehler code PLS-00103.

      Comment


      • #4
        Das ist komplett falsch aufgebaut

        https://docs.oracle.com/cd/E17952_01...e-handler.html
        Christian

        Comment

        Working...
        X