我尝试将新的INTEGER列添加到表中。该列必须为NOT NULL,默认值为1,并且只接受大于零的值。
我现在正试图这样做:
ALTER TABLE FOO_AUTHORS
ADD PUBLICATION_PERIOD_DAYS INTEGER DEFAULT(1) NOT NULL
CONSTRAINT publicationPeriodDays
CHECK (PUBLICATION_PERIOD_DAYS>0);
有没有办法在一行中执行此操作?我跟随this示例,但由于NOT NULL,它无法正常工作。那么NOT NULL是否必要?
我从数据库中收到以下错误:
QL错误:ORA-02293:无法验证(DBOWNER.PUBLICATIONPERIODDAYS) - 检查约束违反 02293. 00000 - "无法验证(%s。%s) - 检查违反约束" *原因:alter table操作尝试验证检查约束 填充了具有无比值的表。
如果我在没有NOT NULL的情况下尝试它,它可以正常工作。
答案 0 :(得分:2)
将NOT NULL
约束转换为CHECK
约束:
ALTER TABLE FOO_AUTHORS
ADD PUBLICATION_PERIOD_DAYS INTEGER DEFAULT 1
CONSTRAINT publicationPeriodDays
CHECK ( PUBLICATION_PERIOD_DAYS IS NOT NULL AND PUBLICATION_PERIOD_DAYS > 0 );
现有行的PUBLICATION_PERIOD_DAYS
设置为默认值。