oracle认证:Oracle中只更新两张表对应数据的方法Oracle认证考试

文章作者 100test 发表时间 2009:05:22 12:29:16
来源 100Test.Com百考试题网


  先建立一个结构一模一样的表emp1,并为其插入部分数据
  create table emp1
  as
  0select * from emp where deptno = 20.
  0update掉emp1中的部分数据
  0update emp1
  set sal = sal   100,
  comm = nvl(comm,0)   50
  然后我们试着使用emp1中数据来更新emp中sal 和 comm这两列数据。
  我们可以这么写
  Update emp
  Set(sal,comm) = (0select sal,comm. From emp1 where emp.empno = emp1.empno)
  Where exists (0select 1 from emp1 where emp1.empno = emp.empno)
  请你尤其注意这里的where子句,你可以尝试不写where子句来执行以下这句话,你将会使得emp中的很多值变成空。
  我们还还可以这么写:
  0update (0select a.sal asal,b.sal bsal,a.comm acomm,  
  b.comm bcomm from emp a,emp1 b where a.empno = b.empno)
  set asal = bsal,
  acomm = bcomm.
  这里的表是一个类视图。当然你执行时可能会遇到如下错误:
  ERROR 位于第 2 行:
  ORA-01779: 无法修改与非键值保存表对应的列
  这是因为新建的表emp1还没有主键的缘故
  下面增加一个主键
  alter table emp1
  add constraint pk_emp1 primary key (empno).
  执行之后
  在执行前面的语句就能成功。
  这里我们总结一下:
  在oracle中不存在0update from结构,所以遇到需要从另外一个表来更新本表的值的问题的时候,有两种解决的办法:
  一种是使用子查询,使用子查询时一定要注意where条件(一般后面接exists子句),除非两个表是一一对应的,否则where条件必不可少,遗漏掉where条件时可能会导致插入大量空值。
  另外一种是类视图的更新方法,这也是oracle所独有的。先把对应的数据全部抽取出来,然后更新表一样更新数据,这里需要注意的是,必须保证表的数据唯一型。
  更多优质资料尽在百考试题论坛 百考试题在线题库 oracle认证更多详细资料

相关文章


oracle认证:Oracle密码文件的创建、使用和维护Oracle认证考试
oracle认证:Oralce中的成本评估机制解析Oracle认证考试
oracle认证:解决Oracle中的数据更改后出错的方法Oracle认证考试
oracle认证:Oracle数据块损坏恢复总结Oracle认证考试
oracle认证:Oracle中只更新两张表对应数据的方法Oracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛