Statut : Non résoluProbleme de trigger
sqlloader, le mardi 23 novembre 2004 à 10:14:32 Bonjour, j'ai un probleme au niveau d'un trigger que j'ai fait.
Le code est bon, il n'y a pas d'erreur mais au moment d'inserer des lignes j'ai une erreur de ce type:
"ORA-00001: violation de contrainte unique (SCOTT.PK_TESTCAPA)
ORA-06512: à "SCOTT.SURBOOKING", ligne 25
ORA-04088: erreur lors d'exécution du déclencheur 'SCOTT.SURBOOKING'"
il y a bien une contrainte de type primary key sur la table testcapa, mais en aucun cas cette erreur ne devrait apparaitre car je n'insere pas de données deja presente dans la table.
D'ou peut venir le probleme selon vous?
Voici le code du trigger:
create or replace trigger surbooking
before insert on RESERVATION
for each row
declare
cursor c1 is select dureesejour from reservation;
var INTEGER;
laCapacite INTEGER;
NombreChambresTotal INTEGER;
begin
open c1;
loop
fetch c1 into var;
exit when c1%NOTFOUND;
if var=1
then insert into testcapa(IdCentre,IdClient,NoSemaine,Annee,NombreChambresReservees)
values(:new.IdCentre,:new.IdClient,:new.NoSemaine,:new.Annee,:new.NombrechambresReservees);
end if;
if var=2
then insert into testcapa(IdCentre,IdClient,NoSemaine,Annee,NombreChambresReservees)
values(:new.IdCentre,:new.IdClient,:new.NoSemaine+1,:new.Annee,:new.NombrechambresReservees);
end if;
if var=3
then insert into testcapa(IdCentre,IdClient,NoSemaine,Annee,NombreChambresReservees)
values(:new.IdCentre,:new.IdClient,:new.NoSemaine+2,:new.Annee,:new.NombrechambresReservees);
end if;
if var=4
then insert into testcapa(IdCentre,IdClient,NoSemaine,Annee,NombreChambresReservees)
values(:new.IdCentre,:new.IdClient,:new.NoSemaine+3,:new.Annee,:new.NombrechambresReservees);
end if;
if var=5
then insert into testcapa(IdCentre,IdClient,NoSemaine,Annee,NombreChambresReservees)
values(:new.IdCentre,:new.IdClient,:new.NoSemaine+4,:new.Annee,:new.NombrechambresReservees);
end if;
end loop;
select trunc(NombreChambresDuCentre*1.05) into laCapacite
from centre c, reservation r
where c.IdCentre=r.idcentre;
select sum(NombreChambresReservees) into NombreChambresTotal
from testcapa t
where t.IdCentre=:new.idcentre
and t.NoSemaine=:new.NoSemaine
and t.Annee=:new.annee;
if NombreChambresTotal>laCapacite
then raise_application_error(-20003, 'Oooooooops');
end if;
end;
/