sql—如何为oracle db添加具有特定条件的列

8fq7wneg  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(269)

如何在注册表中添加日期类型的字段-单据。doc(完成日期)也应大于doj(加入日期)。
我编写了这个查询,但它显示错误:列检查约束不能引用其他列

ALTER TABLE Registration add DOC date CHECK(DOC > DOJ);
0md85ypi

0md85ypi1#

使用单个alter table语句添加doc列和check约束(请参见此处的DBFIDLE):

-- table for testing
create table atable( doj date ) ;

alter table atable
add (
  doc date
, constraint checkdoc check( doc > doj ) -- cannot be coded *inline*
);

-- testing -----------------------------------------------------
-- this insert must succeed
insert into atable( doj, doc ) values ( sysdate, sysdate + 1 );

-- this insert must fail due to the CHECK constraint
insert into atable( doj, doc ) values ( sysdate + 1, sysdate ) ;
-- ORA-02290: check constraint (...CHECKDOC) violated

-- table/data --------------------------------------------------
select * from atable ;
DOJ         DOC
03-JUN-20   04-JUN-20
bmp9r5qi

bmp9r5qi2#

您需要在表级别而不是列级别创建约束。
例如:

SQL> create table t(x number, doj date);

Table created.

SQL> alter table t add doc date;

Table altered.

SQL> alter table t add constraint check_doc check (doc > doj);

Table altered.

SQL>

相关问题