zoukankan      html  css  js  c++  java
  • 在微信公众号"码海"里学了一招:在update语句里使用case when 以避免多次更新导致的数据异常.

    需求:将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行。
  • 相关阅读:
    CSU 1122
    CSU 1256
    CSU 1240
    HDU 1874
    CSU 1004
    Problem F CodeForces 16E
    Problem E CodeForces 237C
    Problem C FZU 1901
    12-30
    2016-12-29
  • 原文地址:https://www.cnblogs.com/heyang78/p/12854746.html
Copyright © 2011-2022 走看看