找到空值

时间:2015-07-21 11:38:36

标签: sql oracle

我想插入一个非空值。这是一个例子:

create table time(
a varchar2(9),
b varchar2(9),
c varchar2(9));

table create

insert into time (a,c) values ('qq','ee');

table altered

当我按键时:

alter table time
modify b varchar2(9) not null;

出现此错误:

alter table time
*
ERROR at line 1: 
ORA-02296: cannot enable (DIP0114713.) - null values found 

那么我如何向ac列以及列b插入值不为空?

3 个答案:

答案 0 :(得分:5)

如果您未在insert中提及某列,则会获得默认值。默认情况下,默认值为NULL。您可以指定其他内容:

create table time (
    a varchar2(9),
    b varchar2(9) not null default 'NO VALUE',
    c varchar2(9))
);

编辑:

要让alter table正常工作,请先更新值:

update time
    set b = 'NO VALUE'
    where b is null;

答案 1 :(得分:0)

这是不可能的。 首先,您需要更新列b中的数据,然后应用非空约束。

Update time set b= 'NA' where b is null
go
ALTER TABLE time
ALTER COLUMN b varchar(9) NOT NULL
go

答案 2 :(得分:0)

可以在不影响现有行的情况下创建约束:

create table test1(
a varchar2(9),
b varchar2(9),
c varchar2(9));

insert into test1 (a,c) values ('qq','ee');

commit;

alter table test1 modify b varchar2(9) not null novalidate;

select * from test1;

A         B         C        
--------- --------- ---------
qq                  ee       


insert into test1 (a,c) values ('qq2','ee2');

ORA-01400: cannot insert NULL into ("SCHEMA1"."TEST1"."B")

但是,我会建议使用它,就像你需要在桌面上创建未来的约束一样,它可能会使事情变得非常复杂,因为你有"无效"表中的数据。

更好地接受打击和#34;修复"当你创造一个约束时的数据,而不是耸耸肩膀并将其留下一段时间 - 回来咬你(或者如果不是你,还有其他一些穷人)灵魂谁将来坚持维护数据库!)在屁股上。