先建立一个结构一模一样的表emp1,并为其插入部分数据
create table emp1
as
select * from emp where deptno = 20;
update掉emp1中的部分数据
update emp1
set sal = sal + 100,
comm = nvl(comm,0) + 50
然后我们试着使用emp1中数据来更新emp中sal 和 comm这两列数据。
我们可以这么写
Update emp
Set(sal,comm) = (select sal,comm. From emp1 where emp.empno
= emp1.empno)
Where exists (select 1 from emp1 where emp1.empno =
emp.empno)
请你尤其注意这里的where子句,你可以尝试不写where子句来执行以下这句话,你将会使得emp中的很多值变成空。
这是因为在oracle的update语句中如果不写where子句,oracle将会默认的把所有的值全部更新,即使你这里使用了子查询并且某在值并不能在子查询里找到,你就会想当然的以为,oracle或许将会跳过这些值吧,你错了,oracle将会把该行的值更新为空。
我们还还可以这么写:
update (select a.sal asal,b.sal bsal,http://www.doczj.com/doc/c716d383910ef12d2bf9e717.htmlm acomm,
http://www.doczj.com/doc/c716d383910ef12d2bf9e717.htmlm bcomm from emp a,emp1 b where a.empno = b.empno)
set asal = bsal,
acomm = bcomm;
这里的表是一个类视图。当然你执行时可能会遇到如下错误:
ERROR 位于第 2 行: