ora-01407 错误

场景再现:

  SCOTT,EMP 表为例
 
  create table emp1 as select * from emp where deptno=30;
  update emp1 set sal=1;
  commit;
 
假设我想把工资,按照EMP1 中的工资,更新到EMP中
 
 很自然的想到,update emp set sal=(select sal from emp1 where emp.empno=emp1.empno);
 杂一看,语句没有什么问题,(在生产环境上因为有NOT NULL 约束,万幸没更新上去,不然要恢复了)
 
 回去仔细想了想也没什么不对,
 第二天接着测试,无意中,看到。。。。更新之后的表。。天啊。。。其它全改成NULL 了!
 仔细一分析上面语句 update ,set ...少where 条件。。。弱智啊。。
 
 问题重现
 
 alter table emp modify (sal not null);
 update emp set sal=(select sal from emp1 where emp.empno=emp1.empno);
 
SQL 错误: ORA-01407: 无法更新 ("SCOTT"."EMP1"."SAL") 为 NULL
01407. 00000 -  "cannot update (%s) to NULL"
*Cause:    
*Action:
 错误如期而至
 
现在一看,报错很明显了。
 
posted @ 2018-01-15 12:03  N神3  阅读(1557)  评论(0)    收藏  举报