Обновление случайных дат в один столбец (даты повторяются)

Хорошо, сначала я определяю целое число даты для конкретной даты, начиная с которой мне нужно обновить случайные значения в 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 столбец обновляется с той же датой. Я не могу разобраться с этим. Пожалуйста, помогите.

1 ответ

Не используйте подзапрос.
Просто установите =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
Другие вопросы по тегам