1

好的,首先我确定特定日期的日期整数,然后我需要将随机值更新到dpm_dateto列中:

询问 :

select to_char(to_date('15/05/2013','dd/mm/yyyy'), 'J') from dual;

结果:

2456428

现在,我尝试dpm_dateto使用以下查询更新列:

update t_dailypm
set dpm_dateto = 
     (select to_date(trunc(dbms_random.value(2456428,2456428+76)), 'J') from dual)
where dpm_loc = 'P2' and dpm_department like '%IN%';

结果:

900 rows updated.

但是,问题是dpm_dateto列中的每个不同值都使用相同的日期更新。我无法理解这一点。请帮忙。

4

1 回答 1

4

不要使用子查询。
只需 set=your_expression,如下例所示。
Oracle 优化子查询并且只计算一次,但表达式将针对每一行计算:

create table xyz(
  abc date
);

insert into xyz
select sysdate from dual
connect by level < 6;

select * from xyz;

ABC    
--------
13/07/17 
13/07/17 
13/07/17 
13/07/17 
13/07/17 

现在:

update xyz set abc = to_date(trunc(dbms_random.value(2456428,2456428+76)), 'J');

select * from xyz;

ABC    
--------
13/06/14 
13/07/23 
13/07/26 
13/06/24 
13/07/10
于 2013-07-17T10:28:48.140 回答