Toon posts:

Oracle PL/SQL

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Hieronder een stukje PL/SQL code voor een trigger in Oracle (7). Het maken van de trigger gaat prima, maar tijdens het uitvoeren van een update of insert krijg ik de melding
trigger may not see it
Wie ziet de fout?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
create or replace trigger T_inschrijvingscontrole
after insert or update on inschrijving for each row
declare
  
  v_aantalinschrijvingen integer;
  v_schoolnaam inschrijving.schoolnaam%type;
  v_programma inschrijving.programma%type;
  

begin

     select count(plaatsnaam), schoolnaam, programma 
     into v_aantalinschrijvingen,v_schoolnaam,v_programma
     from inschrijving 
     where schoolnaam=:new.schoolnaam and programma=:new.programma
     group by programma,schoolnaam;

if v_aantalinschrijvingen > 1 then
  if v_programma = 13 then
    if v_aantalinschrijvingen > 4 then
    raise_application_error(-20000,'Aan een estafette mogen maximaal 4 leerlingen meedoen.');
    end if;
  elsif v_programma = 14 then
    
    raise_application_error(-20000,'Aan het leraarzwemmen mag maar 1 leraar per school deelnemen.');

  else
    if v_aantalinschrijvingen > 2 then
    raise_application_error(-20000,'Er mogen maar 2 leerlingen aan dit onderdeel meedoen.');
    end if;
  end if;
end if;

end;
/

Verwijderd

dit is slechts een deel van de foutmelding
de rest van de foutmelding lijkt me duidelijk genoeg.

Verwijderd

mutating table.
je mag "from inschrijving" niet gebruiken in die trigger omdat die op het moment gewijzigd wordt.

Verwijderd

Topicstarter
Daar zou je wel eens gelijk aan kunnen hebben, ik ga kijken of ik een deel kan vervangen door een procedure

Bedankt

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Los van de fout, lijkt je de volgende code niet net zo makkelijk?
De group by was niet nodig en ook het selecteren van de school en het programma niet.
De if structuur was imho nogal ondoorzichtig en moeilijk uitbreidbaar, vandaar die aanpassing.

Zie maar wat je ermee doet
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
create or replace trigger T_inschrijvingscontrole
after insert or update on inschrijving for each row
declare
  
  v_aantalinschrijvingen integer;

begin

     select count(plaatsnaam)
     into   v_aantalinschrijvingen
     from   inschrijving 
     where  schoolnaam=:new.schoolnaam and programma=:new.programma;

  if :new.programma = 13 and v_aantalinschrijvingen > 4
  then
    raise_application_error(-20000,'Aan een estafette mogen maximaal 4 leerlingen meedoen.');
  end if;

  if :new.programma = 14 and v_aantalinschrijvingen > 1
  then
    raise_application_error(-20000,'Aan het leraarzwemmen mag maar 1 leraar per school deelnemen.');
  end if;

  if v_aantalinschrijvingen > 2
  then
    raise_application_error(-20000,'Er mogen maar 2 leerlingen aan dit onderdeel meedoen.');
  end if;

end;
/