ORA-01407: cannot update错误
(2013-04-29 17:01:07)
标签:
oracleit |
分类: oracle |
写了一条完全没有问题的语句,执行时竟然报错
update MAGE a
set a.fxc_xtbh = (select a
from text b where a.fxc_xh = b.fxc_xh)
ERROR at line 2:
ORA-01407: cannot update ("TEXT"."MAGE"."FXC_XTBH") to NULL
根据报错信息,FXC_XTBH列并没有赋值为空,text表的a列完全是有值的,为什么会报赋了空值呢
原因就在于mage的表结构上,看一下MAGE的表结构,
create table MAGE
(
FXC_XH
NUMBER(12) not null,
FXC_XH2
NUMBER(12) default 0,
FXC_XTBH
VARCHAR2(2) not null
)
FXC_XTBH列的默认值为非空,但是update的时候,并没有把空值给FXC_XTBH。网上找原因,正确的写法应该是这样,后面要加一个where条件,
update MAGE a
set a.fxc_xtbh = (select a
from text b where a.fxc_xh = b.fxc_xh)
where exists (select 1 from
text b where a.fxc_xh = b.fxc_xh);
条件的内容就是上面子查询的内容
如果不想报ORA-01407这个错误,有两种办法
1、MAGE,text两张表的记录要完全一样
2、要update的表记录要比对照表的记录少
不然update的时候在最后就要加一个 where exists 语句,这个和merge的用法很像,当然这只是一个特例,对于没有指定not null的列,普通的update是完全没有问题的
oracle就是有这么一些奇怪的用法,不必深究,知道用法就好。
update MAGE a
ERROR at line 2:
ORA-01407: cannot update ("TEXT"."MAGE"."FXC_XTBH") to NULL
根据报错信息,FXC_XTBH列并没有赋值为空,text表的a列完全是有值的,为什么会报赋了空值呢
原因就在于mage的表结构上,看一下MAGE的表结构,
create table MAGE
(
)
FXC_XTBH列的默认值为非空,但是update的时候,并没有把空值给FXC_XTBH。网上找原因,正确的写法应该是这样,后面要加一个where条件,
update MAGE a
条件的内容就是上面子查询的内容
如果不想报ORA-01407这个错误,有两种办法
1、MAGE,text两张表的记录要完全一样
2、要update的表记录要比对照表的记录少
不然update的时候在最后就要加一个 where exists 语句,这个和merge的用法很像,当然这只是一个特例,对于没有指定not null的列,普通的update是完全没有问题的
oracle就是有这么一些奇怪的用法,不必深究,知道用法就好。
前一篇:aix 5.3 gcc编译器
后一篇:人生不要后悔