Toon posts:

[PL/SQL] trigger werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ondanks dat het bijna weekend heb ik toch nog een belastend vraagje

Ik ben met een opdracht voor school bezig (opdracht schoolzwemmen), maar heb een probleem met de volgende trigger:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE OR REPLACE  TRIGGER tr_controleer_serie
BEFORE UPDATE OR INSERT ON inschrijving
FOR EACH ROW 
DECLARE
hoogste_serie inschrijving.serie%TYPE;
hoogste_baan inschrijving.baan%TYPE;
BEGIN 
SELECT max(i.serie), max(i.baan) INTO hoogste_serie, hoogste_baan
FROM inschrijving i
WHERE i.programma = :new.programma;
if hoogste_baan = 4 then
:new.serie := hoogste_serie +1;
:new.baan := 1;
else
:new.serie := hoogste_serie;
:new.baan := hoogste_baan +1;
end if;
END;
/


het is de bedoeling dat de trigger het volgende doet:

Uitleg trigger:

· De trigger wordt uitgevoerd voordat er records aan de tabel ‘inschrijving’ worden toegevoegd.
· De variabelen ‘hoogste_serie’ en ‘hoogst_baan’ worden gedeclareerd.
· Uit de tabel ‘inschrijving’ worden de hoogste waarden van resp. de series en de banen gehaald. Vervolgens worden deze waarden in de variabelen hoogste_serie en hoogste_baan gezet.
· Dan wordt er gecontroleerd of baan 4 voorkomt in de serie met de hoogste waarde.
- Als baan 4 voorkomt in de serie met de hoogste waarde, dan wordt de waarde van serie
met 1 opgehoogd en wordt de waarde van baan uit de betreffende serie op 1 gezet.
- Als baan 4 niet voorkomt dan blijft de waarde van serie onveranderd en wordt de waarde
van baan met 1 opgehoogd.

Testset:

· Bij programma 8 zijn er 7 deelnemers reeds ingeschreven. Bij 7 deelnemers worden er 2 series gezwommen; serie1 waarbij alle vier de banen bezet zijn, serie2 waarbij er 3 banen bezet zijn. Vervolgens voegen we een nieuwe deelnemer toe en controleren we of de trigger ervoor heeft gezorgd dat de deelnemer wordt ingedeeld in serie2 baan4.
· Bij programma 9 zijn er 4 deelnemers reeds ingeschreven. Bij 4 deelnemers wordt er 1 serie gezwommen waarbij alle vier de banen bezet zijn. Vervolgens voegen we een nieuwe deelnemer toe en controleren we of de trigger ervoor heeft gezorgd dat de deelnemer wordt ingedeeld in serie2 baan1.

als ik deze trigger invoer dan geeft hij geen foutmelding, alleen hij doet helemaal niets.

Ben er nu 2 dagen mee bezig en kom er niet meer uit (gezocht maar niets gevonden) |:( , iemand een idee wat ik fout doe?

Verwijderd

Als ik het zo even snel bekijk, dan lijkt het erop dat je geen relatie legt tussen max(serie) en max(baan). Als er eenmaal iemand in baan 4 zwemt (in een andere serie) krijg je altijd 4 terug als max..

Verklaart welliswaar niet waarom ie helemaal niets doet, maar toch..
Dat kan ik zo ook lastig zien.
Gaat het fout bij het toevoegen van het eerste record?? Dan zou het nog aan de max kunnen liggen die null teruggeeft (nvl(.., 0)!?!?)

Hopelijk helpt dit je een beetje op weg

Grtz
Bram

PS selecteren op de tabel die je aan het updaten bent lijkt me trouwens niet echt een goed idee

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

In de before update is je record nog niet gepost.
Zo te zien moet dit je tot een zgn. 'mutating table' probleem gaan leiden.
Weet je gelijk de zoekterm om dit op te lossen ;)

Who is John Galt?