bonjour, j'ai un petit soucis pour faire fonctionner mes trigger. A vrai dire, je n'arrive pasa comprendre le fonctionnement exacte du truc.
j'ai une table d'inscription d'eleves a des cours.
chaque cours a un nombre maximum accepté, et chaque eleve ne peut participer qu'a 3 cours.
Dans les procedures de remplissage des tables, ces conditions ont été verrifiées avec succes, et des exceptions générées sans souci.
maintenant il s'agit de tester ces meme conditions dans un trigger. et la je bloque
Citation :
create or replace trigger montrig
before insert on participe
for each row
declare
ideinscri number;
idcinscri number;
nombrecours number;
nombreetu number;
limiteeffectif NUMBER;
BEGIN
select idE into ideinscri from etudiant; select idC into idcinscri from cours;
select count(:old.idE) into nombrecours from participe where idE=ideinscri;
select effectifmax into limiteeffectif from cours where idC=idcinscri;
select count(:old.idC) into nombreetu from participe where idC=idcinscri;
if (nombrecours>2) then
if (nombreetu>=limiteeffectif) then
raise_application_error(-20998,'Trop d etudiants sont deja inscrits a ce cours et cet etudiant a deja atteint le nombre maximum de cours.');
else
raise_application_error(-20998,'Trop d etudiants sont deja inscrits a ce cours');
end if;
raise_application_error(-20999,'cet etudiant a deja atteint le nombre maximum de cours');
end if;
END;
/
|
voici un exemple de ce que j'ai fait
la compilation se passe tres bien.
mais quand je lance la procédure qui doit remplir la table ou se font les test, cela me donne les erreurs suivantes :
Citation :
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at "OPS$1GLUMANN.MONTRIG", line 10
ORA-04088: error during execution of trigger 'OPS$1GLUMANN.MONTRIG'
ORA-06512: at "OPS$1GLUMANN.INSCRIPTION", line 19
ORA-06512: at line 1
|
---------------