powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как подавить connect by loop и размножить строки по ID в 12 версии?
18 сообщений из 18, страница 1 из 1
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39798977
Фотография Shredder2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хочу каждую из этих двух строк размножить loop_me_times раз

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
                        select level lev
                              ,loop_me_times
                              ,row_id
                        from (
                            select 3 loop_me_times,'1' row_id from dual
                            union all 
                            select 5 loop_me_times,'2' row_id  from dual
                        ) t
                        connect by --NOCYCLE 
                                       level <= loop_me_times
                                   and prior row_id = row_id
                                   --and dbms_random.value is not null



как сделать, чтобы оракл не ругался на цикл (ведь я сам контролирую этот цикл) ?
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39798991
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shredder2003как сделатьНе маяться дурью. 21843586
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799100
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
with t as (
           select 3 loop_me_times,'1' row_id from dual union all 
           select 5 loop_me_times,'2' row_id  from dual
          )
select  lev,
        loop_me_times,
        row_id
  from  t,
        lateral(
                select  level lev
                  from  dual
                  connect by level <= loop_me_times
               )
/

       LEV LOOP_ME_TIMES R
---------- ------------- -
         1             3 1
         2             3 1
         3             3 1
         1             5 2
         2             5 2
         3             5 2
         4             5 2
         5             5 2

8 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799192
Фотография Shredder2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

запрос, который привёл SY - это тоже маяние дурью?
Если да, то почему?
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799201
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shredder2003Если да, то почему?Потому что плохо сопровождаемое баловство, пригодное, в основном, для форумов.
Но в отсутствие стремления к повторной используемости и на 12-ом - то можно.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799208
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

латерал шоб dbms_random/guid не использовать?

.....
stax
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799284
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicShredder2003Если да, то почему?Потому что плохо сопровождаемое баловствоИ все-таки, почему?
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799293
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadИ все-таки, почему?Сопровождаемость падает с увеличением количества использованных структурных конструкций. Не?

Один плюс есть - не нужны дополнительные права.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799304
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

С озвученным критерием согласен. Но ведь использовать свой PL/SQL генератор - это необходимость поддерживать дополнительный хранимый объект. Ну а в сравнении с connect by + prior dbms_random.value is not null на мой взгляд специально придуманный для таких задач lateral выглядит прозрачнее.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799333
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadНо ведь использовать свой PL/SQL генератор - это необходимость поддерживать дополнительный хранимый объект.Утилитарный пакет подобного плана - просто muct have как встроенные функции.
AmKadateral выглядит прозрачнееЛучше, да. Но connect by-генератор - это по-прежнему до сих пор незокументированный трюк. Который в разных версиях может отваливаться по нехватке памяти.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799368
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicНе маяться дурью. 21843586

Нy-ну:

Код: 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.
SQL> select  banner
  2    from  v$version
  3  /

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE    12.2.0.1.0      Production
TNS for 64-bit Windows: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

SQL> set timing on
SQL> select avg(column_value) from table(pivot(101000000,1000000))
  2  /

AVG(COLUMN_VALUE)
-----------------
         51000000

Elapsed: 00:00:19.85
SQL> select avg(xmlcast(column_value as number)) from xmltable('1000000,101000000')
  2  /

AVG(XMLCAST(COLUMN_VALUEASNUMBER))
----------------------------------
                          51000000

Elapsed: 00:00:00.03
SQL> 



SY.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799372
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Не, ну а вдруг оптимизатор настолько умен, что во втором случае просто сделал
Код: plsql
1.
2.
3.
4.
5.
6.
select (101000000 + 1000000) / 2 joke
from dual;

      JOKE
----------
  51000000
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799383
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadНе, ну а вдруг оптимизатор настолько умен, что во втором случае просто сделал
Код: plsql
1.
2.
3.
4.
5.
6.
select (101000000 + 1000000) / 2 joke
from dual;

      JOKE
----------
  51000000

Именно это оракл и сделал. Но оптимизатор тут не причем.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799392
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-AmKadНе, ну а вдруг оптимизатор настолько умен, что во втором случае просто сделал
Код: plsql
1.
2.
3.
4.
5.
6.
select (101000000 + 1000000) / 2 joke
from dual;

      JOKE
----------
  51000000

Именно это оракл и сделал. Но оптимизатор тут не причем.
имхо
AmKad имел ввиду что оптимазатор посчитал xmltable('1000000,101000000') как константу и сразу вычислил среднее
(не разворачивая xmltable('1000000,101000000') в строки)

....
stax
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799396
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
xmltable

Т.е. connect by в сравнении даже не рассматривался? :)
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799397
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Да. Но при этом я считал, что этот xmltable призван развернуть все множество строк, хотя по факту выплевываются только две, о чем и сказал -2-.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799419
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Именно это оракл и сделал. Но оптимизатор тут не причем.

Упс. Посыпаю голову пеплом. Дожно быть TO а не зпт. Да, XMLTABLE в разы медленнее.

SY.
...
Рейтинг: 0 / 0
как подавить connect by loop и размножить строки по ID в 12 версии?
    #39799425
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
xmltable('1000000,101000000')

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


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