Trigger auswerten/ verstehen

WenzelPaul

Mitglied
Hallo,

ich habe ein Problem mit einem Trigger aus einer Übung. Ich stehe ziemlich ratlos davor und verstehe nicht was er macht und welchen Inhalt die Tabelle "Vorlesung" am Ende hat.

Hier die Tabelle
tabfz7.jpg


Trigger:
Code:
create trigger TRG_INS_BELEGUNG
on Belegung
after insert as
begin
 declare @manz int

   update VORLESUNG
   set Y = 'N'

    select @manz = (select max(anz) from (select count (*) as anz from BELEGUNG B     
    group by VNR))

   update VORLESUNG
      set Y = 'J'
     where @manz = (select count(*) from BELEGUNG B where B.VNR = VORLESUNG.VNR)

end

insert into Vorlesung values (1, 'Vorlesung_1', 'N')
insert into Vorlesung values (2, 'Vorlesung_1', 'N')
insert into Vorlesung values (3, 'Vorlesung_1', 'N')

insert into Belegung values (1, 1, '123456')
insert into Belegung values (2, 2, '123456')
insert into Belegung values (3, 3, '123456')
insert into Belegung values (4, 4, '123456')

Kann mir jemand bitte kurz die Funktion erläutern ?

Danke im vorraus schonmal.
 
Hiho gerne versuch ich das zu erklären :D

Code:
create trigger TRG_INS_BELEGUNG
on Belegung
after insert as
begin
 declare @manz int

    -- Nach jedem Insert in die Tabelle Belegung wird der Trigger ausgeführt und 
    -- schreibt in jedes Feld bei Y in der Tabelle Vorlesung ein N. Soll bestimmt aussagen ob
    -- eine Vorlesung schon belegt ist oder nicht.
   update VORLESUNG
   set Y = 'N'

     -- Hier wählt er  die maximale Anzahl `manz` aus. Wenn also 2 Leute die gleiche
     -- Vorlesung besuchen wird dort bei manz eine 2 stehen.
    select @manz = (
       select max(anz) from (
            select count (*) as anz from BELEGUNG B     
            group by VNR
       )
    )

    -- Hier updatet er die Tabelle Vorlesung wieder und setzt nur ein J hin wenn
    -- die Anzahl der Belegungen dem entspricht was bei manz gespeichert wurde.
   update VORLESUNG
      set Y = 'J'
     where @manz = (
         select count(*) from BELEGUNG B where B.VNR = VORLESUNG.VNR
     )

end
Bei deinem Beispiel hier wäre es, das alle Vorlesungen nachher bei Y ein J drinnen zu stehen haben. Solltest du jedoch die Belegung bei einer Vorlesung um eine Person erhöhen so wird nur in dieser Vorlesung ein J drinnen stehen bei den anderen ein N.
Warum das so wichtig ist und was ihr mit dem Y anfangen wollt weiß ich nicht aber so musste den Trigger verstehen.

Es könnte auch sein, dass du einen Fehler bekommst denn du hast als VNR eine 4 jedoch nur 3 Vorlesungen eingetragen.

Gruß Dennis
 
Zuletzt bearbeitet:
"Es könnte auch sein, dass du einen Fehler bekommst denn du hast als VNR eine 4 jedoch nur 3 Vorlesungen eingetragen."

Das ist auch glaub ich der wichtige Punkt. Stimmt schon mit 3 Vorlesungen und 4 Belegungen. Gibt das denn einen Fehler?
 
Naja den letzten Insert den du tätigst, möchte in die Tabelle Vorlesung mit der Vorlesung Nummer 4 updaten dies kann leider nicht gehen und deswegen könnte ein Fehler auftreten.

Es kann aber auch sein, das er das nicht updatet und einfach weiter macht...

Gruß
 
Zurück