UML 2 pour les bases de données
204
© Éditions Eyrolles
La clause RAISE_APPLICATION_ERROR génère un ROLLBACK et envoie un message applicatif qui n’est pas dans la plage réservée des erreurs Oracle. Nous verrons dans le cas de la
décomposition descendante un exemple d’exécution de ce déclencheur.
La clause NO_DATA_FOUND permet de lever l’exception lors d’une sélection ne ramenant
aucun enregistrement.
-- déclencheur sur PNT
CREATE TRIGGER Tri_B_IU_PNT
BEFORE INSERT OR UPDATE OF numPers ON PNT FOR EACH ROW
DECLARE
num NUMBER;
BEGIN
SELECT numPers INTO num FROM PNC WHERE numPers = :NEW.numPers;
RAISE_APPLICATION_ERROR(-20001,'Le personnel'||TO_CHAR(num)||'
est déjà PNC...');
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
-- déclencheur sur PNC
CREATE TRIGGER Tri_B_IU_PNC
BEFORE INSERT OR UPDATE OF numPers ON PNC FOR EACH ROW
DECLARE
num NUMBER;
BEGIN
SELECT numPers INTO num FROM PNT WHERE numPers = :NEW.numPers;
RAISE_APPLICATION_ERROR(-20001,'Le personnel'||TO_CHAR(num)||'
est déjà PNT...');
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
END;
Le prédicat B se programme à l’aide de deux procédures cataloguées et d’un déclencheur.
L’ajout d’un personnel sera répercuté dans la table Personnel et dans la table PNT ou dans
la table PNC. Il en va de même pour la modification du numéro d’un personnel ou pour la
suppression d’un personnel qui devra répercuter la suppression dans la table PNT ou dans la
table PNC.
Les deux procédures cataloguées réalisent respectivement l’ajout d’un personnel PNT et d’un
personnel de type PNC. L’appel EXECUTE ajout_PNT(6,'Laurent',
'4MPY01',SYSDATE) déclenchera deux insertions : une dans la table Personnel avec les
valeurs (6,'Laurent'), et l’autre dans la table PNT avec les valeurs (6,'4MPY01',
SYSDATE). SYSDATE désignant la date du jour Oracle.
Étiquette prédéfinie d’Oracle
Artifice pour éviter que le déclencheur
ne renvoie pas d’erreur si le SELECT
ne renvoie aucune ligne
204
© Éditions Eyrolles
La clause RAISE_APPLICATION_ERROR génère un ROLLBACK et envoie un message applicatif qui n’est pas dans la plage réservée des erreurs Oracle. Nous verrons dans le cas de la
décomposition descendante un exemple d’exécution de ce déclencheur.
La clause NO_DATA_FOUND permet de lever l’exception lors d’une sélection ne ramenant
aucun enregistrement.
-- déclencheur sur PNT
CREATE TRIGGER Tri_B_IU_PNT
BEFORE INSERT OR UPDATE OF numPers ON PNT FOR EACH ROW
DECLARE
num NUMBER;
BEGIN
SELECT numPers INTO num FROM PNC WHERE numPers = :NEW.numPers;
RAISE_APPLICATION_ERROR(-20001,'Le personnel'||TO_CHAR(num)||'
est déjà PNC...');
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
-- déclencheur sur PNC
CREATE TRIGGER Tri_B_IU_PNC
BEFORE INSERT OR UPDATE OF numPers ON PNC FOR EACH ROW
DECLARE
num NUMBER;
BEGIN
SELECT numPers INTO num FROM PNT WHERE numPers = :NEW.numPers;
RAISE_APPLICATION_ERROR(-20001,'Le personnel'||TO_CHAR(num)||'
est déjà PNT...');
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
END;
Le prédicat B se programme à l’aide de deux procédures cataloguées et d’un déclencheur.
L’ajout d’un personnel sera répercuté dans la table Personnel et dans la table PNT ou dans
la table PNC. Il en va de même pour la modification du numéro d’un personnel ou pour la
suppression d’un personnel qui devra répercuter la suppression dans la table PNT ou dans la
table PNC.
Les deux procédures cataloguées réalisent respectivement l’ajout d’un personnel PNT et d’un
personnel de type PNC. L’appel EXECUTE ajout_PNT(6,'Laurent',
'4MPY01',SYSDATE) déclenchera deux insertions : une dans la table Personnel avec les
valeurs (6,'Laurent'), et l’autre dans la table PNT avec les valeurs (6,'4MPY01',
SYSDATE). SYSDATE désignant la date du jour Oracle.
Étiquette prédéfinie d’Oracle
Artifice pour éviter que le déclencheur
ne renvoie pas d’erreur si le SELECT
ne renvoie aucune ligne
