Oracle 12c - 列检查约束不能引用其他列
Oracle 12c - Column check constraint cannot reference other column
我必须修改我的 table,我尝试按以下方式进行:
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: Column check constraint cannot reference other columns
02438. 00000 - "Column check constraint cannot reference other columns"
*Cause: attempted to define a column check constraint that references
another column.
*Action: define it as a table check constraint.
此外,我希望该列接受大于 0 的值或 NULL 值。
这只是一个语法怪癖。这样做:
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
代替。诚然,这不允许您命名唯一约束。这对您的数据库重要吗?
- 主键约束也是如此。 (如果你有理由给它们命名,那就保持原样;我只是不经常找到这样的理由。)
我必须修改我的 table,我尝试按以下方式进行:
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: Column check constraint cannot reference other columns
02438. 00000 - "Column check constraint cannot reference other columns"
*Cause: attempted to define a column check constraint that references another column.
*Action: define it as a table check constraint.
此外,我希望该列接受大于 0 的值或 NULL 值。
这只是一个语法怪癖。这样做:
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
代替。诚然,这不允许您命名唯一约束。这对您的数据库重要吗?- 主键约束也是如此。 (如果你有理由给它们命名,那就保持原样;我只是不经常找到这样的理由。)