VÉRIFICATION de la contrainte sur la date de naissance?
Je suis entrain de créer ma table employé dans Oracle et pour emp_date je voudrais faire en sorte que la date de naissance n'est pas le chemin du retour dans le passé et ne peut pas être définie dans l'avenir?
Est-ce trop complexe à mettre en œuvre dans l'instruction CREATE TABLE? si oui, alors je suppose que je dois l'ignorer parce que c'est la partie où je dois créer les contraintes.
, emp_dob DATE NOT NULL
CREATE TABLE employee(emp_id NUMBER(4) PRIMARY KEY
, emp_name VARCHAR2(40) NOT NULL
, emp_address VARCHAR2(60) NOT NULL
, emp_tel NUMBER(11) NOT NULL
, CONSTRAINT emp_tel_length CHECK (LENGTH(emp_tel) BETWEEN 9 and 11)
, emp_dob DATE NOT NULL
, CONSTRAINT check_date_of_birth CHECK (emp_dob BETWEEN DATE '1950-01-01' AND sysdate))
OriginalL'auteur Jatinder Singh | 2011-12-08
Vous devez vous connecter pour publier un commentaire.
Les contraintes de vérification doit être déterministe. C'est une ligne particulière doit toujours satisfaire la contrainte ou il faut toujours ne parviennent pas à satisfaire la contrainte. Mais
SYSDATE
est intrinsèquement non-déterministe puisque la valeur retournée est en constante évolution. Ainsi, vous ne pouvez pas définir unCHECK
contrainte qui appelleSYSDATE
ou toute autre fonction définie par l'utilisateur.Si vous essayez de faire référence à
SYSDATE
dans la définition de la contrainte, vous obtiendrez une erreurVous pouvez créer un
CHECK
contrainte où à la fois le minimum et le maximum date ont été codées en dur, mais qui ne serait pas particulièrement pratique étant donné que vous devez constamment de supprimer et recréer la contrainte.Le moyen le plus pratique pour appliquer ce type d'exigence serait de créer un trigger sur la table
OriginalL'auteur Justin Cave
Une autre solution serait de créer un domaine date de naissance, avec la contrainte intégrée dans le domaine. Cela vous permettra de réutiliser le même type dans d'autres définitions de table.
CREATE DOMAIN
déclaration.Eh bien, je ne le savais pas. C'est vraiment douloureux pour l'oracle utilisateurs, comme ça les obligera à utiliser des types ou des tableaux comme des domaines, ou même de créer laid déclencheurs (voir ci-dessous) pour émuler les domaines.
OriginalL'auteur wildplasser
Ce sujet d'une autre solution de contournement
Écrire sysdate dans une colonne et de les utiliser pour la validation. Cette colonne peut être votre audit de la colonne (Par exemple: date de création)
OriginalL'auteur SriniV