如何创建一个约束,以确保输入的日期始终是> =今天或未来的日期?

时间:2018-03-24 15:43:52

标签: sql oracle check-constraints

我创建了一个名为Project的表,其中有两列ProjectID和StartDate。 我想创建一个约束,以确保所包含的日期始终等于今天或未来日期。

我已经尝试了下面的代码,但是得到了一个缺少的表达式错误。约束仅在创建表后添加。

    CREATE TABLE  PROJECT
    (ProjectID NUMBER(7), 
    StartDate date NOT NULL, 
    CONSTRAINT PK_PROJECTID PRIMARY KEY (ProjectID)
    );

    ALTER TABLE PROJECT
    ADD CONSTRAINT PROJECT_Check_StartDate CHECK(StartDate => Current_date);

1 个答案:

答案 0 :(得分:11)

您的近端错误是正确的运算符是>=,而不是=>

修复该问题只会产生更多存在错误:

  

ORA-02436:CHECK约束

中错误指定的日期或系统变量

也就是说,您无法在check约束中引用动态值,并且当前日期/时间就是这样的值。

最简单的选择是使用触发器来强制执行约束。 A"种类"疯狂选项是存储记录的创建日期(这是一个好主意),然后将未来部分存储为另一列:

create table . . . (
    daysInTheFuture number,  -- fractional days
    CreatedAt date default sysdate,
    constraint chk_t_number check (daysInTheFuture >= 0)
);