2013-10-01 3 views
2

나는 미래의 날짜에 날짜를 허용하지 않는 제약 조건을 만들려고합니다. 나는 이것을 가지고있다 :미래의 날짜 SQL 개발자

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

그러나 나는 error 02436을 얻고있다.

답변

4

비 결정적 제약 조건을 만들 수 없습니다. 따라서 호출 할 때마다 다른 값을 반환하는 current_date 또는 sysdate과 같은 함수를 참조하는 제약 조건을 만들 수 없습니다. 당신이 이런 종류의 물건을 적용하려면

, 내가 다시 시도했던 즉

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

'CURRENT_DATE '로 얻을 수있는'SYSDATE' 함수를 사용하면 똑같은 오류가 발생합니다. 둘 다 비 결정적이며 비 결정적 함수는 제약 조건에서 허용되지 않습니다. –

0

, 비즈니스 규칙을 위반 한 경우 오류가 발생합니다 테이블에 트리거를 만들 필요 했어 이것과는, 그런데 덕분에 오류를 표시하지 않았다

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