[debutant] Trigger ou close check ? date naissance < sysd
Bonjour!
Voila j'utilise oracle 10 g .Voici mon problème:
J'ai une table :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| CREATE TABLE EMPLOYE
(
CODE CHAR(3) NOT NULL,
NOM CHAR(32) NOT NULL,
PRENOM CHAR(32) NOT NULL,
DATE_NAISSANCE DATE NOT NULL,
LIEU_NAISSANCE CHAR(32) NULL,
ADRESSE CHAR(100) NOT NULL,
CODEPOSTAL NUMBER(5) NOT NULL,
VILLE CHAR(32) NOT NULL,
NUMTEL NUMBER(10) NULL,
SECTEUR CHAR(40) NOT NULL CHECK (SECTEUR IN ('Administratif', 'Medical', 'Surveillance'))
, CONSTRAINT PK_EMPLOYE PRIMARY KEY (CODE)
) ; |
Je dois vérifier que la date de naissance de l'employe n'est pas supérieur à la date du jour.
Je me suis donc dit que c'etait surement une contrainte Check mais je n'ai pas réussi.
En revanche j'ai essayer un trigger :
Code:
1 2 3 4 5 6 7
| CREATE OR REPLACE TRIGGER add_employe
BEFORE INSERT OR UPDATE OF DATE_NAISSANCE ON EMPLOYE FOR EACH ROW
BEGIN
IF :NEW.DATE_NAISSANCE >= SYSDATE THEN
raise_application_error(-20001,'Date de naissance doit être inferieur a la date du jour!');
END IF;
END; |
Et puis lorsque je force l'erreur j'obtiens :
Code:
1 2 3
| ORA-20001: Date de naissance doit être inferieur a la date du jour!
ORA-06512: à "BEN.ADD_EMPLOYE", ligne 3
ORA-04088: erreur lors d'exécution du déclencheur 'BEN.ADD_EMPLOYE' |
Voila je me demande si l'erreur qu'il me fait part (ORA-04088) est normal?
Et puis est ce que la façon dont je gère le problème est bien?
N'existe t-il pas une contrainte check permettant de faire ca?
Merci beaucoup par avance...
Benoît