powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DBMS random
15 сообщений из 15, страница 1 из 1
DBMS random
    #40026929
pumpk1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, пытаюсь обновить значения в таблице через DMBS random.

Вставляю DBMS_RANDOM.value(1,1500), записывается NULL.
если пытаюсь через такой вариант ROUND(DBMS_RANDOM.value(1,1500)) - получаю ошибку:

авторError report -
ORA-01427: подзапрос одиночной строки возвращает более одной строки
ORA-06512: на line 3
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:

Если для проверки подставляю 1, все окей.

Cам запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
SET SERVEROUTPUT ON
BEGIN
    FOR loop_counter IN 1..4500 LOOP
        UPDATE X_DARBS A SET A.D_ATSAUCE = (SELECT REF(A) FROM TAB_ATSAUCES A, TABLE(A.ELEM_ATSAUCES) B WHERE VALUE(B).ATS_NUM = ROUND(DBMS_RANDOM.value(1,1500))) WHERE A.D_NUM = loop_counter;
        END LOOP;
        COMMIT;
END;
...
Рейтинг: 0 / 0
DBMS random
    #40026931
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpk1n,

А что вы ожидали? Можете гарантировать в своих данных, что записи с VALUE(B).ATS_NUM уникальны по ATS_NUM и гарантированно содержат значения от 1 до 1500?
...
Рейтинг: 0 / 0
DBMS random
    #40026936
pumpk1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env, вполне, на рандом около 5 значений протыкал, всё есть + вывел все 1500 строк.
...
Рейтинг: 0 / 0
DBMS random
    #40026938
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpk1n,

авторORA-01427: подзапрос одиночной строки возвращает более одной строки


если неважно (DBMS_RANDOM) какая строка , добавте and rownum=1

.....
stax
...
Рейтинг: 0 / 0
DBMS random
    #40026940
pumpk1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

Код: plsql
1.
ROUND(DBMS_RANDOM.value(1,1500)) and rownum=1



сделал такую конструкцию, половина заполнилась половина нет, странно -_-
но явно хотя бы рабочий вариант
...
Рейтинг: 0 / 0
DBMS random
    #40026971
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpk1n
Stax,

Код: plsql
1.
ROUND(DBMS_RANDOM.value(1,1500)) and rownum=1



сделал такую конструкцию, половина заполнилась половина нет, странно -_-
но явно хотя бы рабочий вариант


а шо там странного
ATS_NUM = ROUND(DBMS_RANDOM.value(1,1500)))

нет некоторых ATS_NUM из диапазона 1,1500

.....
stax
...
Рейтинг: 0 / 0
DBMS random
    #40026976
pumpk1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, начальник клянусь шо есть, выводил из всех таблиц, все окей. Но как только дохожу до этого момента, сразу начинается какая то фигня.

Код: plsql
1.
SELECT B.ATS_NUM, B.A_AMATS.O_AMATS.NOSAUKUMS FROM TAB_ATSAUCES A, TABLE(A.ELEM_ATSAUCES) B ORDER BY B.ATS_NUM ASC;



От 1 до 1500 проскролил все сам, ни одного NULL
...
Рейтинг: 0 / 0
DBMS random
    #40026982
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpk1n,

я не про null

значения >=1 и <=1500 и нет дырок ?


....
stax
...
Рейтинг: 0 / 0
DBMS random
    #40026983
pumpk1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, 0 дырок.

Нашел такой варик, вроде рабочий:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SET SERVEROUTPUT ON
DECLARE
N PLS_INTEGER;
BEGIN
    FOR loop_counter IN 1..4500 LOOP
        N := DBMS_RANDOM.VALUE(1,1500);
        UPDATE X_DARBS A SET A.D_ATSAUCE = (SELECT REF(A) FROM TAB_ATSAUCES A, TABLE(A.ELEM_ATSAUCES) B WHERE VALUE(B).ATS_NUM = N) WHERE A.D_NUM = loop_counter;
        END LOOP;
        COMMIT;
END;
...
Рейтинг: 0 / 0
DBMS random
    #40026989
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpk1n,

Код: plsql
1.
2.
3.
4.
5.
6.
with t (n) as ( 
SELECT B.ATS_NUM FROM TAB_ATSAUCES A, TABLE(A.ELEM_ATSAUCES) B ORDER BY B.ATS_NUM ASC
)
select min(n),max(n), max(d) from
 (select n,n-lag(n) over (order by n) d from t where  n between 1 and 1500)
/



что возвращает?

.....
stax
...
Рейтинг: 0 / 0
DBMS random
    #40027071
pumpk1n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, что то такое:

автор MIN(N) MAX(N) MAX(D)
---------- ---------- ----------
1 1500 1
...
Рейтинг: 0 / 0
DBMS random
    #40027118
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpk1n
Stax, что то такое:

автор MIN(N) MAX(N) MAX(D)
---------- ---------- ----------
1 1500 1


тогда не знаю в чем поблем

.....
stax
...
Рейтинг: 0 / 0
DBMS random
    #40027170
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pumpk1n
Привет, пытаюсь обновить значения в таблице через DMBS random.

Вставляю DBMS_RANDOM.value(1,1500), записывается NULL.
если пытаюсь через такой вариант ROUND(DBMS_RANDOM.value(1,1500)) - получаю ошибку:

авторError report -
ORA-01427: подзапрос одиночной строки возвращает более одной строки
ORA-06512: на line 3
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:



В твоём случае random вызывается для каждой строки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create table t as select rownum n from dual connect by level <= 1000;

Table created.

select listagg(n, ', ') nagg from t where n = trunc(dbms_random.value(1,1000));

NAGG
------------------------------


1 row selected.

> /

NAGG
------------------------------
138, 453, 902

1 row selected.
...
Рейтинг: 0 / 0
DBMS random
    #40027183
Alexander Anokhin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
listagg был лишним

Код: 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.
select n from t where n = trunc(dbms_random.value(1,1000));

         N
----------
       169
       532

2 rows selected.

> /

no rows selected

> /

         N
----------
       276
       705

2 rows selected.

> /

no rows selected
...
Рейтинг: 0 / 0
DBMS random
    #40027220
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander Anokhin

В твоём случае random вызывается для каждой строки
[/src]


С интересом наблюдал за темой, хорошие оказались грабли.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select
  2    level,
  3    dbms_random.value(0,1) diff,
  4    (select dbms_random.value(0,1) from dual) same
  5  from dual connect by level <= 10
  6  /
     LEVEL       DIFF       SAME
---------- ---------- ----------
         1 0,32303190 0,64191997
         2 0,03514089 0,64191997
         3 0,59558913 0,64191997
         4 0,01180705 0,64191997
         5 0,64057286 0,64191997
         6 0,88664540 0,64191997
         7 0,02871910 0,64191997
         8 0,45722473 0,64191997
         9 0,98486123 0,64191997
        10 0,17891413 0,64191997
10 rows selected
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DBMS random
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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