需求:将emp表中工资大于一万的降到9成,工资少于一万的乘以1.2.
难点:如果分成两句update执行,在10000附近的值可能会执行两次.
钥匙:在update语句里采用case when,使更新仅仅执行一次.
代码展示:
SQL> create table emp(
2 id number(4,0) primary key,
3 salary number(6,0) not null);表已创建。SQL> insert into emp
2 select rownum,dbms_random.value(8000,28000)
3 from dual
4 connect by level<11
5 order by dbms_random.random;已创建10行。SQL> commit;提交完成。SQL> select * from emp; ID SALARY
---------- ----------
9 13106
1 9069
7 21277
8 16638
2 25422
3 15759
4 25120
6 14113
10 23617
5 27846已选择10行。SQL> update emp set salary=(case when salary>10000 then salary*0.9 when salary<10000 then salary*1.2 else salary end);已更新10行。SQL> commit;提交完成。SQL> select * from emp; ID SALARY
---------- ----------
9 11795
1 10883
7 19149
8 14974
2 22880
3 14183
4 22608
6 12702
10 21255
5 25061已选择10行。