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

Sql 如何为日期列添加检查约束,sql,oracle,Sql,Oracle,我得到了这个错误 ORA-02438:列检查约束无法引用其他列 当我执行此查询时 alter table Issue modify Issue_Date not null check (Issue_Date <= sys_date); altertable问题 修改Issue\u Date not null check(Issue\u Date我怀疑您想引用OracleSYSDATE函数,而不是名为sys\u Date的列 不幸的是,检查约束中的条件不能引用SYSDATE函数 要获取数据

我得到了这个错误

ORA-02438:列检查约束无法引用其他列

当我执行此查询时

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

修改Issue\u Date not null check(Issue\u Date我怀疑您想引用Oracle
SYSDATE
函数,而不是名为
sys\u Date
的列

不幸的是,
检查约束中的条件不能引用SYSDATE函数

要获取数据库,请对列的值强制执行这种类型的限制,这将需要一个
触发器

例如,类似这样的内容:

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;
创建或替换触发器训练问题日期问题
在插入或更新问题之前
每行
开始

如果(NEW.Issue_Date您试图混淆内联列级约束和表级约束(超过1列)。请简单地将它们拆分为两条语句:

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);
altertable问题
修改出库日期不为空;
更改表格问题

添加约束检查日期检查(问题日期删除sysdate中的下划线借助虚拟列(版本11或更高版本),您可以在检查约束中使用sysdate:如果我删除检查约束中错误指定的下划线:ORA-02436:日期或系统变量,则会出现此错误
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);