我创建了一个名为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);
答案 0 :(得分:11)
您的近端错误是正确的运算符是>=
,而不是=>
。
修复该问题只会产生更多存在错误:
ORA-02436:CHECK约束
中错误指定的日期或系统变量
也就是说,您无法在check
约束中引用动态值,并且当前日期/时间就是这样的值。
最简单的选择是使用触发器来强制执行约束。 A"种类"疯狂选项是存储记录的创建日期(这是一个好主意),然后将未来部分存储为另一列:
create table . . . (
daysInTheFuture number, -- fractional days
CreatedAt date default sysdate,
constraint chk_t_number check (daysInTheFuture >= 0)
);