Toon posts:

[Oracle] triggeren op leeftijd *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo ,i k zit met een probleem:ik wil een trigger maken om te testen op de leeftijd van iemand, als deze persoon jonger is dan 18 dan moet er een trigger afgaan en een exception geven.

ik test op een kleine testtabel :
create table testdatum
( datum date ) ;

DIT IS MIJN TRIGGER

create or replace trigger controle
after insert or update of datum
on testdatum
for each row

DECLARE
v_datum date ;
v_leeftijd number(3) ;
foute_leeftijd exception ;

BEGIN

select datum into v_datum
from testdatum;

v_leeftijd := floor(months_between(sysdate ,v_datum)/12) ;

if v_leeftijd < 18 then

raise foute_leeftijd ;

end if ;

EXCEPTION
when foute_leeftijd then
dbms_output.put_line('foute leeftijd') ;

END controle ;

als ik nu wil inserten krijg ik de volgende fout :

SQL> insert into testdatum values('11-feb-01') ;
insert into testdatum values('11-feb-01')
*
ERROR at line 1:
ORA-04091: table PROJ10.TESTDATUM is mutating, trigger/function may not see it
ORA-06512: at "PROJ10.CONTROLE", line 8
ORA-04088: error during execution of trigger 'PROJ10.CONTROLE'

Wie kan mij helpen ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:31
In dit geval maak je imo beter een BEFORE trigger ipv een AFTER trigger.

Je krijgt trouwens een error omdat je in die trigger een SELECT statement oid doet op die tabel. Waarom je dat doet, is mij ook helemaal niet duidelijk. Je maakt beter gebruik van de :old en :new variabeles:

code:
1
2
if :new.leeftijd < 18 then 
end if;


Gebruik ook code-tags om je code te formatten.

[ Voor 57% gewijzigd door whoami op 07-01-2004 13:46 ]

https://fgheysels.github.io/


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
2
select datum into v_datum 
from testdatum;

Als je gaat zitten grasduinen in de tabel waar je trigger ook op zit dan krijg je mutating table problemen, dit bovenstaande stukje mag dus niet.
Zoals whoami al zegt hoor je dit middels :old en :new variabelen te doen.

Who is John Galt?