我想插入一个非空值。这是一个例子:
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
那么我如何向a
和c
列以及列b
插入值不为空?
答案 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;修复"当你创造一个约束时的数据,而不是耸耸肩膀并将其留下一段时间 - 将回来咬你(或者如果不是你,还有其他一些穷人)灵魂谁将来坚持维护数据库!)在屁股上。