Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1378 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Les triggers: tester si les insertions n'ont pas dépassé une limite

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Les triggers: tester si les insertions n'ont pas dépassé une limite

n°2064846
elephantdr​eam
Posté le 19-03-2011 à 23:35:37  profilanswer
 

Bonsoir!
 
Je fait appel à vous car j'ai un problème avec les triggers...
 
Voila, je suis en train de créer une base de données avec Oracle ( Dans le cadre d'un projet , je suis étudiant)  et je bloque sur une chose!
Le sujet : Des client qui s'inscrivent et participent à des activités, Il y a d'autres élement mais qui n'on pas de rapport avec mon problème. Je vous donne l’essentiel.  
J'aimerai créer un trigger qui me permet de tester si l'inscription d'un client à une activité est possible car cela dépend du nombre de places disponible par activité.
 
ainsi, si le nombre de places maximum est atteint, l'inscription sera annulée.  
 
voila se que j'ai fait:
 
1. les tables
J'ai une table client (id client, nom, adresse...)
une table activités (code_activite, designation, date, nb_places_max)
Inscrit_activité(id_client,code_activite,date_inscription)
 
Le trigger que j'ai essayer et le suivant (Il ne marche pas et j'ignore pour quoi :S)
 
CREATE TRIGGER TEST BEFORE INSERT ON INSCRIT_ACTIVITE
FOR EACH ROW
 
DECLARE &a
 
set &a = select count id_client from inscrit_activite
if &a< select (nb_place_max from activite where code_activite='1' ) -- Le code est un exemple, en gros c'est le code de l'activité voulu
 
begin
 
insert into inscrit_activite values (:new.id_client,:new.code_activite,:new.date)
end
 
go

 
Merci de m'aider, Soyez gentil en ce qui concerne les éventuelles erreurs de syntaxe: Je suis un vrai débutant!

mood
Publicité
Posté le 19-03-2011 à 23:35:37  profilanswer
 

n°2067788
john clees​e
Posté le 03-04-2011 à 21:34:09  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Les triggers: tester si les insertions n'ont pas dépassé une limite

 

Sujets relatifs
Mysql - Triggers - Limitation - Workaround?[Résolu] Configurer WampServeur pour accès au localhost
[C++] Date limite d'utilisation d'un logicielRecuperer les insertions récentes dans une table
Tester une application avec setup.py sans l'installer[BATCH]tester la valeur d'un clé de registre.
[PostgreSQL] insertion massive et triggersTester l'existence d'une classe en javascript mootools
Tester l'injection sur un formulaire ?Cherche volontaires pour tester l'évolution majeure d'un script
Plus de sujets relatifs à : Les triggers: tester si les insertions n'ont pas dépassé une limite


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR