Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как проапдейтить колонку случайными значениями из списка / 23 сообщений из 23, страница 1 из 1
30.10.2020, 16:11
    #40013504
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
Попробовал вот так
Не помогло, в таком случае берет только первое из case

Update имя таблицы
Set type =
( select case round (dbms_random.value(1,2))
When 1 then ‘1’
When 2 then ‘2’ end as type from dual )
...
Рейтинг: 0 / 0
30.10.2020, 16:28
    #40013511
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

А зачем оптимизатору выполнять этот подзапрос больше одного раза?

upd
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
SQL> create table dropme_t as select level n, 0 m from dual connect by level <= 10;

Table created.

SQL> update dropme_t set m = ( select case round (dbms_random.value(1,2))
  2  When 1 then ‘1’
  3  When 2 then ‘2’ end as type from dual ) ;

10 rows updated.


Execution Plan
----------------------------------------------------------
Plan hash value: 165252305

---------------------------------------------------------------------------------------------
| Id  | Operation                        | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT                 |          |    10 |    50 |     5  (20)| 00:00:01 |
|   1 |  UPDATE                          | DROPME_T |       |       |            |          |
|   2 |   OPTIMIZER STATISTICS GATHERING |          |    10 |    50 |     2   (0)| 00:00:01 |
|   3 |    TABLE ACCESS STORAGE FULL     | DROPME_T |    10 |    50 |     2   (0)| 00:00:01 |
|   4 |   FAST DUAL                      |          |     1 |       |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

SQL> select * from dropme_t;

         N          M
---------- ----------
         1          2
         2          2
         3          2
         4          2
         5          2
         6          2
         7          2
         8          2
         9          2
        10          2

10 rows selected.

SQL> update dropme_t set m = ( select case round (dbms_random.value(1,2))
  2  When 1 then ‘1’
  3  When 2 then ‘2’ end as type from dual where n>0) ;

10 rows updated.

Execution Plan
----------------------------------------------------------
Plan hash value: 1962704572

---------------------------------------------------------------------------------------------
| Id  | Operation                        | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT                 |          |    10 |    50 |    32  (32)| 00:00:01 |
|   1 |  UPDATE                          | DROPME_T |       |       |            |          |
|   2 |   OPTIMIZER STATISTICS GATHERING |          |    10 |    50 |     2   (0)| 00:00:01 |
|   3 |    TABLE ACCESS STORAGE FULL     | DROPME_T |    10 |    50 |     2   (0)| 00:00:01 |
|*  4 |   FILTER                         |          |       |       |            |          |
|   5 |    FAST DUAL                     |          |     1 |       |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - filter(:B1>0)

SQL> select * from dropme_t;

         N          M
---------- ----------
         1          1
         2          1
         3          2
         4          2
         5          1
         6          2
         7          1
         8          1
         9          2
        10          1

10 rows selected.

...
Рейтинг: 0 / 0
30.10.2020, 16:36
    #40013515
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

Зачем подзапрос и case?
...
Рейтинг: 0 / 0
30.10.2020, 16:37
    #40013516
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

И подзапрос тут явно нафиг не нужен же
...
Рейтинг: 0 / 0
30.10.2020, 16:39
    #40013517
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
Connected to Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 
Connected as big3@//X.X.X.X/TEST

SQL> create table t1 as select rownum i, 0 v from dual connect by level < 11;

Table created


SQL> select * from t1;

         I          V
---------- ----------
         1          0
         2          0
         3          0
         4          0
         5          0
         6          0
         7          0
         8          0
         9          0
        10          0

10 rows selected


SQL> update t1 set v = dbms_random.value()*i;

10 rows updated


SQL> select * from t1;

         I          V
---------- ----------
         1 0,82480650
         2 0,23886174
         3 1,51064599
         4 2,66973706
         5 2,00712497
         6 0,03180440
         7 6,55668969
         8 2,83085541
         9 4,60585548
        10 0,23058894

10 rows selected


SQL> update t1 set v = dbms_random.value()*(i - rownum);

10 rows updated


SQL> select * from t1;

         I          V
---------- ----------
         1          0
         2          0
         3          0
         4          0
         5          0
         6          0
         7          0
         8          0
         9          0
        10          0

10 rows selected


SQL> update t1 set v = dbms_random.value()*(i - rownum + 1);

10 rows updated


SQL> select * from t1;

         I          V
---------- ----------
         1 0,08755091
         2 0,71252861
         3 0,60163507
         4 0,27828220
         5 0,91756062
         6 0,16155102
         7 0,96227677
         8 0,68332564
         9 0,70987549
        10 0,61680787

10 rows selected


SQL> 
...
Рейтинг: 0 / 0
30.10.2020, 16:39
    #40013518
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
graycode,

нужно каждую строку в таблице проапдейтить случайными значениями из списка , в данном случае из '1', '2'

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare
 cnt integer;
begin
loop
for cnt in 1..100000
Set type =
( select case round (dbms_random.value(1,2))
When 1 then ‘1’
When 2 then ‘2’ end as type from dual )
commit;
end loop;
END;



Что не так?
...
Рейтинг: 0 / 0
30.10.2020, 16:43
    #40013522
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

set type = to_char(round (dbms_random.value(1,2)), 'tm')
...
Рейтинг: 0 / 0
30.10.2020, 16:44
    #40013526
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare
 cnt integer;
begin
loop
for cnt in 1..100000
Set type =
( select case round (dbms_random.value(1,2))
When 1 then ‘1’
When 2 then ‘2’ end as type from dual )
commit;
end loop;
END;




Что не так?


Конкретно в этом куске кода - всё не так.
...
Рейтинг: 0 / 0
30.10.2020, 16:48
    #40013529
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
dmdmdm

Код: plsql
1.
SQL> create table t1 as select rownum i, 0 v from dual connect by level < 11;




Код: plsql
1.
2.
3.
create table t1 as select rownum i, '0' v from dual connect by level < 11;

update t1 set v = to_char(trunc(dbms_random.value(1,3)));
...
Рейтинг: 0 / 0
30.10.2020, 16:52
    #40013531
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
graycode,
у меня value вида 01000, 20201, 20401
...
Рейтинг: 0 / 0
30.10.2020, 16:54
    #40013533
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
graycode,
так он всю таблицу целиком обновит одним значением а мне нужно построчно
...
Рейтинг: 0 / 0
30.10.2020, 16:55
    #40013534
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

Вот сейчас вообще не понял, зачем тебе тогда односимвольные 1 или 2?
...
Рейтинг: 0 / 0
30.10.2020, 16:57
    #40013537
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu
graycode,
так он всю таблицу целиком обновит одним значением а мне нужно построчно

Опять не понял, задайте where и обновится часть таблицы и не одним значением, а случайным значением из интервала 1 - 2.
...
Рейтинг: 0 / 0
30.10.2020, 16:57
    #40013538
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

Как раз в твоём варианте обновит одним значением, т.к. закеширует подзапрос.
...
Рейтинг: 0 / 0
30.10.2020, 17:12
    #40013546
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
env,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare
cursor cur_upd is
Select * from [таблица];
begin
for i in cur_upd LOOP
Update [таблица]
Set type=
( select case round (dbms_random.value(1,2))
When 1 then ‘001’
When 2 then ‘002’ end as type from dual );
commit;
end loop;
end;



Сейчас попробовал через курсор но что то на синтаксис ругается
...
Рейтинг: 0 / 0
30.10.2020, 17:14
    #40013547
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

Не нужен здесь ни курсор, ни подзапрос.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL> update dropme_t set m = 0;

10 rows updated.

SQL> update dropme_t set m = round (dbms_random.value(1,2));

10 rows updated.

SQL> select * from dropme_t;

         N          M
---------- ----------
         1          2
         2          1
         3          1
         4          1
         5          2
         6          1
         7          1
         8          1
         9          2
        10          1

10 rows selected.



И доку что ли почитайте... С такими курсорами
...
Рейтинг: 0 / 0
30.10.2020, 17:19
    #40013550
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

case не нужен, round тоже не очень хорошо, верхняя граница не входит в интервал, поэтому лучше trunc, если нужны нолики перед цифрой, воспользуйтесь форматированием
Код: plsql
1.
select to_char(trunc(dbms_random.value(1,3)), '009') from dual connect by level < 11;
...
Рейтинг: 0 / 0
30.10.2020, 17:21
    #40013552
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
graycode,

value могут быть самыми разными 20202 000102 394957
...
Рейтинг: 0 / 0
30.10.2020, 17:23
    #40013554
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu
value могут быть самыми разными


В вашем запросе - не могут.
...
Рейтинг: 0 / 0
30.10.2020, 17:24
    #40013555
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

добавить в dbms_random.value выражение от поля из строки

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SQL> ed
Wrote file afiedt.buf

  1  Update dropme_t
  2  Set m = case round(dbms_random.value(1,nvl2(n,2,2)))
  3     When 1 then 'Stax'
  4     When 2 then 'x17'
  5*    end
SQL> /

10 rows updated.

SQL> select * from dropme_t;

         N M
---------- -----
         1 Stax
         2 Stax
         3 x17
         4 Stax
         5 x17
         6 Stax
         7 Stax
         8 x17
         9 x17
        10 x17

10 rows selected.



....
ps
у меня и без nvl2(n,2,2) случайно меняет

.....
stax
...
Рейтинг: 0 / 0
30.10.2020, 17:28
    #40013557
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu
graycode,

value могут быть самыми разными 20202 000102 394957

Что за value, если вы присваиваете тип, причем ограничиваете его двумя значениями 1 и 2, да еще и в текстовом виде?

Если бы было '20202', т.е. некая сформированная строка определенной длины и определенный диапазон цифр для каждой из позиций, тогда можно что то такое изобразить:
Код: plsql
1.
2.
3.
4.
5.
create table t1 as select rownum i, '00000' v from dual connect by level < 11;

update t1
set v = (select listagg(to_char(trunc(dbms_random.value(0,3))))
           from dual connect by level < 6 and i > 0);
...
Рейтинг: 0 / 0
30.10.2020, 17:33
    #40013558
x17.mstu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
graycode,

В итоге сделал два последовательных update
Спасибо
...
Рейтинг: 0 / 0
30.10.2020, 17:39
    #40013562
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проапдейтить колонку случайными значениями из списка
x17.mstu,

Покажите итоговый код. Задлянафига там два апдейта?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как проапдейтить колонку случайными значениями из списка / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]