Salut,
Alors d'abord, du côté syntaxe, le :
declare &a
me semble ne pas coller à la syntaxe du PL/SQL.
D'ailleurs, quand je lis ton code, la syntaxe me semble être celle du Transac SQL...
Ensuite, le truc, c'est que tu es dans un trigger qui se déclenche AVANT la mise à jour. En gros, dis-toi que si tu n'agis pas (notamment en levant une erreur) avant la fin du trigger, l'insertion se passera une fois le trigger exécuté.
Donc inutile d'ajouter l'insertion des données, puisque ton trigger justement s'est déclenché parce que tu étais en train d'insérer ces données. Il faut juste vérifier qu'il est possible de s'inscrire, et lever une erreur si ce n'est pas le cas.
Bon, j'ai la flemme de vérifier ma syntaxe, mais ça devrait ressembler à ça :
CREATE TRIGGER TEST BEFORE INSERT ON INSCRIT_ACTIVITE
FOR EACH ROW
referencing old as old new as new
DECLARE
l_dummy integer;
l_dummy2 integer;
BEGIN
select count(*)
into l_dummy
from inscrit_activite;
select nb_place_max
into l_dummy2
from activite
where code_activite='1' ;
if l_dummy >= l_dummy2 then
raise_application_error(-20000, 'Trop d''inscrits a cette activite. Game Over');
end if;
end;
Sachant que ce code n'est pas tellement robuste si 2 personnes (ou plus) s'inscrivent en même temps pour une activité pour laquelle il reste une seule place disponible. mais ça, c'est une autre histoire...
Message édité par john cleese le 06-04-2011 à 21:05:41
---------------
Je poste peu, mais c’est parce que je réfléchis beaucoup avant de poster. Ce qui n'empêche pas que la plupart de mes interventions sont navrantes. Mais j’en suis fier.