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代替。诚然,这不允许您命名唯一约束。这对您的数据库重要吗?
  • 主键约束也是如此。 (如果你有理由给它们命名,那就保持原样;我只是不经常找到这样的理由。)