Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как подавить connect by loop и размножить строки по ID в 12 версии? / 18 сообщений из 18, страница 1 из 1
09.04.2019, 17:55
    #39798977
Shredder2003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как подавить connect by loop и размножить строки по ID в 12 версии?
хочу каждую из этих двух строк размножить 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
09.04.2019, 18:14
    #39798991
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как подавить connect by loop и размножить строки по ID в 12 версии?
Shredder2003как сделатьНе маяться дурью. 21843586
...
Рейтинг: 0 / 0
10.04.2019, 03:37
    #39799100
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как подавить connect by loop и размножить строки по ID в 12 версии?
Код: 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
10.04.2019, 10:32
    #39799192
Shredder2003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как подавить connect by loop и размножить строки по ID в 12 версии?
Elic,

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

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

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

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

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

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

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

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

Именно это оракл и сделал. Но оптимизатор тут не причем.
...
Рейтинг: 0 / 0
10.04.2019, 14:47
    #39799392
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как подавить connect by loop и размножить строки по ID в 12 версии?
-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
10.04.2019, 14:54
    #39799396
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как подавить connect by loop и размножить строки по ID в 12 версии?
SY
Код: plsql
1.
xmltable

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

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

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

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

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


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