обновление значения случайной строки для существующих записей в таблице оракула - PullRequest
0 голосов
/ 21 декабря 2018

Я хотел бы обновить существующие записи в таблице оракулов случайной строкой (ГГГГ-ДД)
Я успешно создал запрос, который возвращает случайное значение даты, например:

select  to_char(TO_DATE('2003/07/09', 'yyyy/mm/dd') + trunc(dbms_random.value(0,(TO_DATE('2003/07/09', 'yyyy/mm/dd')-TO_DATE('2018/07/09', 'yyyy/mm/dd')+1))),
                         'YYYY-MM') rDate   from dual

Но по какой-то причине мой скрипт обновления устанавливает одинаковое значение для всех записей, почему это не случайно?

CREATE TABLE tmp_del_me (    
    name varchar(255),
    year_month_started varchar(255)
);

insert into tmp_del_me (name)VALUES ('a');
insert into tmp_del_me (name)VALUES ('b');
insert into tmp_del_me (name)VALUES ('c');
insert into tmp_del_me (name)VALUES ('d');


UPDATE tmp_del_me
SET  year_month_started = (
                    select  to_char(TO_DATE('2003/07/09', 'yyyy/mm/dd') + trunc(dbms_random.value(0,(TO_DATE('2003/07/09', 'yyyy/mm/dd')-TO_DATE('2018/07/09', 'yyyy/mm/dd')+1))),
                     'YYYY-MM') rDate   from dual
                     )
            /

drop table tmp_del_me;

1 Ответ

0 голосов
/ 21 декабря 2018

Хороший улов !!

Ваш внутренний запрос выполняется только один раз, и столбцу year_month_started присваивается всегда одно и то же значение.

Если вы не используете подзапрос, DML работает должным образом.

UPDATE T1
SET COL1 = 
  to_char(TO_DATE('2003/07/09', 'yyyy/mm/dd') + 
     trunc(dbms_random.value(0,(TO_DATE('2003/07/09', 'yyyy/mm/dd')-
     TO_DATE('2018/07/09', 'yyyy/mm/dd')+1))), 'YYYY-MM') ;

Вот ссылка на скрипач: http://sqlfiddle.com/#!4/43bb3f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...