如何为日期列添加检查约束

时间:2014-09-28 20:21:38

标签: sql oracle

我收到此错误

  

ORA-02438:列检查约束不能引用其他列

我执行此查询时

alter table Issue
modify Issue_Date not null check (Issue_Date <= sys_date);

以及我也必须添加这个条件(issue_date<return_date);

当我尝试这个时

alter table Issue
add constraint ck_Issue_Date not null check (Issue_Date <= sys_date);
  

ERROR ORA-00904 ::无效标识符

2 个答案:

答案 0 :(得分:1)

我怀疑您想要引用Oracle SYSDATE函数,而不是名为sys_date的列。

不幸的是,CHECK CONSTRAINT中的条件无法引用SYSDATE函数。

要让数据库对列的值强制执行此类限制,则需要TRIGGER

例如,像这样:

CREATE OR REPLACE TRIGGER trg_issue_issue_date_biu
BEFORE INSERT OR UPDATE ON Issue
FOR EACH ROW
BEGIN
   IF (NEW.Issue_Date <= SYSDATE) THEN
      NULL;
   ELSE
      RAISE_APPLICATION_ERROR(-20000, 'Invalid: Issue_Date is NULL or >SYSDATE');
   END IF;
END;

答案 1 :(得分:0)

您试图混合内联列级别约束和表级别约束(超过1列)。请简单地将它们分成2个语句:

alter table Issue
  modify Issue_Date not null;

alter table Issue
  add constraint ck_Issue_Date check (Issue_Date <= sys_date);

alter table Issue
  add constraint ck_Issue_Date2 check (issue_date<return_date);