首页 > 解决方案 > 如何制作引用两列的检查约束?

问题描述

我想使用以下查询在 Oracle 中创建一个表 Sp:

create table SP(Order_date date ,Dely_date date  check(Dely_date>Order_date));

但问题是oracle显示错误“列检查约束不能引用其他列”

但是,如果我在没有此条件的情况下创建此表,check(Dely_date>Order_date) 则会创建表。

告诉我为什么检查约束不能用于两列。

如果我使用此子句更改 SP 表, check(Dely_date>Order_date)
那么我的检查约束将正常工作。但是在创建时检查约束不能在上述条件下工作。

标签: databaseoracleconstraints

解决方案


这就是 Oracle 的做法——内联检查约束不能引用另一列。

解决方法?创建离线约束:

SQL> create table SP
  2    (Order_date date ,
  3     Dely_date  date,
  4     --
  5     constraint ch_date check (Dely_date > Order_date)
  6    );

Table created.

SQL>   insert into sp values (date '2020-03-03', date '2020-02-15');
  insert into sp values (date '2020-03-03', date '2020-02-15')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_DATE) violated


SQL>   insert into sp values (date '2020-03-03', date '2020-04-23');

1 row created.

SQL>

推荐阅读