知识大全 Oracle中只更新两张表对应数据的方法

Posted

篇首语:技艺是无价之宝,知识是智慧的明灯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle中只更新两张表对应数据的方法相关的知识,希望对你有一定的参考价值。

Oracle中只更新两张表对应数据的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  先建立一个结构一模一样的表emp 并为其插入部分数据

  

  create table emp asselect * from emp where deptno = ;

  update掉emp 中的部分数据

  

  update emp set sal = sal + m = nvl(m ) +

  然后我们试着使用emp 中数据来更新emp中sal 和 m这两列数据

  我们可以这么写

  

  Update empSet(sal m) = (select sal m From emp where emp empno = emp empno)Where exists (select from emp where emp empno = emp empno)

  请你尤其注意这里的where子句 你可以尝试不写where子句来执行以下这句话 你将会使得emp中的很多值变成空

  这是因为在oracle的update语句中如果不写where子句 oracle将会默认的把所有的值全部更新 即使你这里使用了子查询并且某在值并不能在子查询里找到 你就会想当然的以为 oracle或许将会跳过这些值吧 你错了 oracle将会把该行的值更新为空

  我们还还可以这么写

  

  update (select a sal asal b sal bsal m am

  m bm from emp a emp b where a empno = b empno)set asal = bsal am = bm;

  这里的表是一个类视图 当然你执行时可能会遇到如下错误:

  ERROR 位于第 行:

  ORA : 无法修改与非键值保存表对应的列

  这是因为新建的表emp 还没有主键的缘故

  下面增加一个主键

  

  alter table emp

  add constraint pk_emp primary key (empno);

  执行之后

  在执行前面的语句就能成功

  这里我们总结一下

  在oracle中不存在update from结构 所以遇到需要从另外一个表来更新本表的值的问题的时候 有两种解决的办法:

  一种是使用子查询 使用子查询时一定要注意where条件(一般后面接exists子句) 除非两个表是一一对应的 否则where条件必不可少 遗漏掉where条件时可能会导致插入大量空值

cha138/Article/program/Oracle/201311/16852

相关参考

知识大全 oracle中merge的简单使用

  merge在oracle用以从另一张表中取数据插入到一张表中如果两张表中记录符合某些条件则替换如果不符合则插入下面的例子是把mergetest中记录更新到newmergetest如果两张表的id相

知识大全 联合删除两张表的数据

  大家都知道DELETE后面不能跟多张表但有时删除数据时要同时维护多张表的数据这怎么办呢?  假设AB两张表它们通过ID进行关联A表中有时间字段而B表中没有现根据时间段删除数据  SQL  以下是引

知识大全 设计模

  近段要实现一个上传excel文件到服务器并把excel文件的数据导入到数据库表中的功能   excel文件有两种格式对应数据库两张表我先实现了其中一种excel格式式

知识大全 ADO.Net实现Oracle大批量数据的更新优化

ADO.Net实现Oracle大批量数据的更新优化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 oracle查询数据并同时修改状态

  有一个表中的数据需要每月更新数据量近百万考虑由台服务器分摊并分批进行更新  这就需要能够查询一批记录并同时修改这批记录的更新状态以免被正在更新的数据被其他服务器取到  加行级锁查询到记录后再遍历结

知识大全 教会你掌握oracle外表

  外表(externaltable)就像普通的表对像一样可以select等只是它是只读的数据库中只保存了表结构的描述表数据却没有存放在数据库内而是存放在了文件系统上当用户想偶尔使用数据库外的结构化数

知识大全 oracle中如何判断本表有多少张表对其有外键关联

  在oracle中如何判断本表有多少张表对其有外键关联?我们主要分为两步  第一步  //查询表的主键约束名  select*fromuser_constraintsewhereetable_nam

知识大全 oracle数据库sql的优化总结

  自己对oraclesql的一些优化总结自己也记录下来也希望对大家有帮助  一使用where少使用having;  二查两张以上表时把记录少的放在右边;  三减少对表的访问次数;  四有where子

知识大全 Oracle11g数据库移植

Oracle11g数据库移植  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据库版本频繁更新不

知识大全 oracle函数mergininto用法

  所有的MIS系统都存在一个同样的需求就是对于特定的数据在一次批量操作过程中如果数据已经存在则对存在的数据按照现有情况进行  更新如果不存在则需要加入数据库这时我们就可以考虑采用Oracle的MER