您现在的位置是:首页 >

excel对应名称录入数据 Oracle中只更新两张表对应数据的方法

火烧 2023-01-25 18:30:53 1035
Oracle中只更新两张表对应数据的方法   先建立一个结构一模一样的表em 并为其插入部分数据    create ta le em a elect * from em where de t o =

Oracle中只更新两张表对应数据的方法  

  先建立一个结构一模一样的表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);

  执行之后

excel对应名称录入数据 Oracle中只更新两张表对应数据的方法

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

  这里我们总结一下

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

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

lishixinzhi/Article/program/Oracle/201311/16852  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码