我必须修改我的表,我尝试按以下方式执行:
ALTER TABLE projects
MODIFY (
id_proj NUMBER(4) CONSTRAINT pk_proj PRIMARY KEY,
desc VARCHAR2(40) NOT NULL CONSTRAINT uk_proj UNIQUE,
end_date CONSTRAINT chk_date CHECK(end_date > start_date),
fund CHECK (fund > 0)
);
当我尝试执行此查询时,我收到错误:
ORA-02438:列检查约束不能引用其他列
02438. 00000 - “列检查约束不能引用其他列”
*原因:尝试定义引用的列检查约束 另一栏 *操作:将其定义为表检查约束。
此外,我希望列接受大于0或NULL值的值。
答案 0 :(得分:2)
这只是一种语法怪癖。这样做:
ALTER TABLE projects
MODIFY (
id_proj NUMBER(4) CONSTRAINT pk_proj PRIMARY KEY,
desc VARCHAR2(40) NOT NULL CONSTRAINT uk_proj UNIQUE,
end_date DATE, -- I'm guessing this is the type
CONSTRAINT chk_date CHECK (end_date > start_date),
fund CHECK (fund > 0)
);
如错误所示,您不能拥有引用其他列的内联检查约束。你仍然可以有一个检查约束;它只需要自己声明为约束。
我们正在发表评论:
desc
是一个非常糟糕的列名,因为它是一个SQL关键字。使用descr
或拼出整件事,description
。CONSTRAINT uk_proj UNIQUE
对我来说似乎很啰嗦。它可以用简单的UNIQUE
替换。不可否认,这不允许您命名唯一约束。这对你的数据库很重要吗?