加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ORA-01407: cannot update错误

(2013-04-29 17:01:07)
标签:

oracle

it

分类: 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就是有这么一些奇怪的用法,不必深究,知道用法就好。

0

阅读 收藏 喜欢 打印举报/Report
后一篇:人生不要后悔
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有