我收到此错误
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 ::无效标识符
答案 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);