2013-10-01 3 views
2

J'essaie de créer une contrainte qui n'autorise pas les dates dans les années à venir. J'ai ceci:Future Dates SQL Developer

ALTER TABLE PACIENTE ADD CONSTRAINT ck_FechaNacimiento 
CHECK (FechaNacimiento<=current_date); 

Mais je suis en train de error 02436.

Répondre

4

Vous ne pouvez pas créer une contrainte non déterministe. Vous ne pouvez donc pas créer une contrainte qui référence une fonction comme current_date ou sysdate qui renvoie une valeur différente chaque fois que vous l'appelez.

Si vous souhaitez appliquer ce genre de chose, vous auriez besoin de créer un déclencheur sur la table qui renvoie une erreur si la règle d'entreprise est violée, à savoir

CREATE OR REPLACE TRIGGER trg_paciente 
    BEFORE INSERT OR UPDATE 
    ON paciente 
    FOR EACH ROW 
BEGIN 
    IF(:new.FechaNacimiento > current_date) 
    THEN 
    RAISE_APPLICATION_ERROR(-20001, 'FechaNacimiento<=current_date must be in the past'); 
    END IF; 
END; 
-3
ALTER TABLE PACIENTE ADD CONSTRAINT ck_FechaNacimiento CHECK (FechaNacimiento<=SYSDATE); 
+1

Vous obtiendrez la même erreur en utilisant la fonction 'SYSDATE' que vous obtiendriez avec' CURRENT_DATE'. Les deux sont non déterministes et les fonctions non déterministes ne sont pas autorisées dans les contraintes. –

0

Je l'avais essayé à nouveau avec cela et n'a pas montré erreur, merci de la façon suivante:

ALTER TABLE EXAMENPACIENTE AJOUTER CONTRAINTE ExamenPaciente_FechaExamen_c1 CHECK (FechaExamen < = '30 -SEP 2013);