powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как проапдейтить колонку случайными значениями из списка
23 сообщений из 23, страница 1 из 1
Как проапдейтить колонку случайными значениями из списка
    #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
Как проапдейтить колонку случайными значениями из списка
    #40013511
Фотография 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
Как проапдейтить колонку случайными значениями из списка
    #40013515
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x17.mstu,

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

И подзапрос тут явно нафиг не нужен же
...
Рейтинг: 0 / 0
Как проапдейтить колонку случайными значениями из списка
    #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
Как проапдейтить колонку случайными значениями из списка
    #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
Как проапдейтить колонку случайными значениями из списка
    #40013522
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

set type = to_char(round (dbms_random.value(1,2)), 'tm')
...
Рейтинг: 0 / 0
Как проапдейтить колонку случайными значениями из списка
    #40013526
Фотография 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
Как проапдейтить колонку случайными значениями из списка
    #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
Как проапдейтить колонку случайными значениями из списка
    #40013531
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,
у меня value вида 01000, 20201, 20401
...
Рейтинг: 0 / 0
Как проапдейтить колонку случайными значениями из списка
    #40013533
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,
так он всю таблицу целиком обновит одним значением а мне нужно построчно
...
Рейтинг: 0 / 0
Как проапдейтить колонку случайными значениями из списка
    #40013534
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x17.mstu,

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

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

Как раз в твоём варианте обновит одним значением, т.к. закеширует подзапрос.
...
Рейтинг: 0 / 0
Как проапдейтить колонку случайными значениями из списка
    #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
Как проапдейтить колонку случайными значениями из списка
    #40013547
Фотография 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
Как проапдейтить колонку случайными значениями из списка
    #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
Как проапдейтить колонку случайными значениями из списка
    #40013552
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,

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


В вашем запросе - не могут.
...
Рейтинг: 0 / 0
Как проапдейтить колонку случайными значениями из списка
    #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
Как проапдейтить колонку случайными значениями из списка
    #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
Как проапдейтить колонку случайными значениями из списка
    #40013558
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycode,

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

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


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