Tu as deux tables
Employe(EmpNo,nom,prenom, chef, salaire, commission,SerNo)
Service(SerNo,Nom,Lieu,NbEmploye)
Tu souhaites renseigner le champ NbEmploye de Service avec le nombre d'employé avec le même SerNo
Le trigger doit se déclencher sur les modifications de la table Employe
Dans le cas d'un Update : il faut gérer le cas d'un changement de SerNo
1 2 3 4
| if :NEW.SerNo <> :OLD.SerNo then
UPDATE Service set NbEmploye = NbEmploye + 1 where SerNo = :NEW.Serno
UPDATE Service set NbEmploye = NbEmploye - 1 where SerNo = :OLD.Serno
end if; |
Dans le cas d'un Insert
UPDATE Service set NbEmploye = NbEmploye + 1 where SerNo = :NEW.Serno
Dans le cas d'un Delete
UPDATE Service set NbEmploye = NbEmploye - 1 where SerNo = :OLD.Serno
Maintenant il faut initialiser cette colonne NbEmploye
UPDATE Service set NbEmploye = (select count(1) from Employe where Employe.SerNo = Service.SerNo)
Ce qui manque...peut être car je ne connaît pas les fonctionnalités de ton application.
Ne pas oublier le cas d'insertion d'un employe avec un SerNo inexistant
Dans le trigger , il faut tester si SQL%rowcount > 0 alors l'update a fonctionné sinon créer la ligne
Pour l'initialisation :
1 2 3 4 5
| INSERT INTO Service(SerNo,NbEmploye)
select SerNo , count(1)
from Employe E
where not exists ( select 1 from service s where s.SerNo=E.SerNo)
group by SerNo |
Partager