把data这个字段里面大于10.7的都更新成10.7小于10.7的并且这些更新的这些数据要求是在0到0.3之间的连续的,也就是在10.7的基础上减去的数值是0到0.3的随机数

解决方案 »

  1.   

     select 10.7+abs(to_number(dbms_random.value(0,0.3))) from dual;
      

  2.   

    如果要更新的是大于10.7的那些数的话
    select case when data>10.7 then data-round(dbms_random.value(0,0.3),1 ) end new_data from table1 
      

  3.   

    /*创建表*/
    create table test_bb
    (
     name varchar2(255),
     datafloat number(8,2)
    )/*创建测试数据*/insert into test_bb values ('aa',10.7);
    insert into test_bb values ('bb',10.8);
    insert into test_bb values ('cc',10.6);
    insert into test_bb values ('dd',10.5);
    insert into test_bb values ('ee',10.4);
    insert into test_bb values ('ff',10.9);
    insert into test_bb values ('gg',10.3);
    insert into test_bb values ('hh',10.2);
    commit;/*显示测试数据*/
    rownum  name    datafloat
    1 aa 10.70
    2 bb 10.80
    3 cc 10.60
    4 dd 10.50
    5 ee 10.40
    6 ff 10.90
    7 gg 10.30
    8 hh 10.20/*update 语句更新*/update test_bb
    set test_bb.datafloat = (select a.datafloatx from (
    select name,10.7 - round(dbms_random.value(0,0.3),1 ) as datafloatx from test_bb where datafloat < 10.7
    union all
    select name,10.7 from test_bb where datafloat >= 10.7) a
    where test_bb.name = a.name
    )/*显示结果*/
    rownum  name    datafloat1 aa 10.70
    2 bb 10.70
    3 cc 10.70
    4 dd 10.70
    5 ee 10.50
    6 ff 10.70
    7 gg 10.60
    8 hh 10.50