Voici un exemple de déclencheur Oracle BEFORE INSERT OR UPDATE pour effectuer des validations lors de l'insertion ou de la mise à jour des enregistrements dans la table EMP.
Exemple de déclencheur Oracle BEFORE INSERT OR UPDATE
Le déclencheur ci-dessous effectuera les deux vérifications suivantes sur la table EMP. (1) Si vous insérez les enregistrements, il vérifiera que la colonne de commission ne dépasse pas 500. (2) En cas de mise à jour, il vérifiera que la colonne JOB ne doit pas être définie comme nulle.
CREATE OR REPLACE TRIGGER TRIG_EMP_BEF_UPD_INS BEFORE INSERT OR UPDATE ON EMP FOR EACH ROW BEGIN IF INSERTING THEN /* commission should not be greater than 500, for new record*/ IF :new.comm > 500 THEN raise_application_error ( -20001, 'Commission should not be greater than 500.'); END IF; ELSIF UPDATING THEN /* check for column JOB should not be set as null while update*/ IF :new.job IS NULL THEN raise_application_error (-20001, 'Column JOB should have a value.'); END IF; END IF; END;
Tester au-dessus du déclencheur pour l'instruction d'insertion
Insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) Values (7399, 'A.SMITH', 'CLERK', 7902, TO_DATE('12/17/1980 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 800, 550, 20);
Sortie
Error at line 1 ORA-20001: Commission should not be greater than 500. ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 6 ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS' Script Terminated on line 1.
Tester le déclencheur ci-dessus pour l'instruction de mise à jour
UPDATE EMP SET sal = 900, job = NULL WHERE empno = 7499;
Sortie
Error at line 2 ORA-20001: Column JOB should have a value. ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 12 ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS' Script Terminated on line 2.
Vous pouvez tester ce déclencheur dans votre schéma en téléchargeant les tables de démonstration à partir du lien suivant Télécharger le script Scott Schema.
Voir aussi :
- Comment utiliser les tables temporaires globales dans la procédure Oracle ?
- Exemple de déclencheur Oracle avec clause WHEN
- Type de table dans l'exemple de procédure Oracle