2017-05-22 1 views
3

Je dois créer une table, où les valeurs de la colonne "ttime" peuvent être dans la plage de 10:00 et 22:00. Voici le code:Vérifier la contrainte pour la colonne dans SQL Developer

create table test ( 
    ttime date, 
    CONSTRAINT CHECK_ttime CHECK(ttime >= TO_DATE('10:00', 'HH24:MI') AND 
           ttime <= TO_DATE('22:00', 'HH24:MI')) 
); 

Mais quand je crée ce tableau, une erreur se produit:

ORA-02436: variable de date ou d'un système mal spécifié dans CHÈQUE contrainte

Comment puis-je l'éviter? Quel est le problème?

Répondre

3

Pour appliquer une telle contrainte, vous devez extraire l'heure de la colonne ttime. Lorsque vous convertissez une partie temporelle d'une date (représentée sous la forme d'une chaîne ici '10:00') en une valeur de DATE, tapez la partie de la date par défaut au premier jour du mois et de l'année en cours, ainsi TO_DATE('10:00', 'HH24:MI') entraînera 01/05/2017 10:00:00 et votre condition deviendra

ttime >= 01/05/2017 10:00:00 and ttime <= 01/05/2017 22:00:00 

note: AND devrait être remplacé par OR. ttime ne peut pas être inférieure à une certaine valeur et en même temps être supérieure à la même valeur.

Cela dit, comme l'une des options, vous pouvez définir vos contraintes comme suit:

constraint t1_chk01 check (to_number(to_char(c1, 'HH24MI')) 
          between 1000 and 2200)