把data这个字段里面大于10.7的都更新成10.7小于10.7的并且这些更新的这些数据要求是在0到0.3之间的连续的,也就是在10.7的基础上减去的数值是0到0.3的随机数
解决方案 »
- oracle存储过程(在线等)
- 数据库乱码问题
- oracle有主动对外(比如socket端口)发送数据的功能么?是什么?
- 请问如何更改oracle的系统表示符 SID?
- 怎么样把Oracle存储过程倒入进去?
- 下面这段SQL语句在oracle中PL/SQL怎么写,急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 一愁莫展Form Builder
- ORA-03113如何处理
- 江湖救急:oracle的日期计算问题,在线等待
- Oracle advanced replication问题?
- 几个ORACLE分布数据库合并到一个ORACLE数据库
- oracle问题 急救呀
select case when data>10.7 then data-round(dbms_random.value(0,0.3),1 ) end new_data from table1
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