LES TRIGGERS

 

Vous travaillerez sur les tables emp et dept

1) Ecriture du trigger 'supdept'

-      Ecrire un trigger qui refuse la suppression d'un département pour lequel il existe des employés

-      Tester le trigger avec un départ. contenant des employés puis créer un nouveau départ. et tester sa suppression

create trigger supdept

before delete on dept

for each row

declare

      nb int ;

begin

      select count(*) into nb from emp

      where deptno = old.dept_;

      if nb>0 then

                  signal sqlstate "22100" set message_text = "Erreur-Il existe des employés dans ce service";

      end if;

end;

 

2) Ecriture du trigger 'ajoutemp' 

-      Ajouter une colonne salmax dans la table dept. Cette colonne contiendra le salaire maximum pouvant être attribué à un employé du département.

-      Alimenter les salaires maxi ainsi : 10000 pour le département 10, 20000 pour le département 20 …

-      Ecrire un trigger qui refuse l'ajout d'un employé si le salaire proposé est supérieur au salaire maximum accepté pour le département.

-      Tester le trigger avec un salaire inférieur ou égal au salaire maxi puis avec un salaire supérieur au salaire maxi.

 

create trigger ajoutemp

before insert on emp

for each row

declare

    nb int;

    sal float;

begin

    select salmax into sal from dept where deptno = new.deptno;

    if new.sal > sal then

       signal sqlstate "22101" set message_text = "Erreur-Le salaire est trop élevé pour ce service" ;

    end if;

end;


 

3) Ecriture du trigger ‘modemp' 

 

-        Effectuer le même contrôle que pour la question 2 mais cette fois le contrôle devra être effectué lors de la modification du salaire.

 

create trigger ajoutemp

before update on emp

for each row

declare

    nb int;

    sal float;

begin

    select salmax into sal from dept where deptno = new.deptno;

    if new.sal > sal then

       signal sqlstate "22101" set message_text = "Erreur-Le salaire est trop élevé pour ce service" ;

    end if;

end;

 

Remarque : on peut écrire un seul trigger pour les questions 2 et 3. Bien sûr ce trigger aurait 2 événements (insert et update of sal)