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

Sho*_*raB 3 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);
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 11

您的近端错误是正确的操作符>=,而不是=>.

修复该问题只会产生更具存在性的错误:

ORA-02436:CHECK约束中错误指定的日期或系统变量

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

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

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