Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Возможно ли использовать UNION внутри LOOP?  [new]
another_login
Member

Откуда:
Сообщений: 3
Добрый день!

Есть кусок кода (Oracle), который выполняет свою функцию, но выглядит весьма некрасиво:

  WITH dates AS (select COLUMN_VALUE d from table(sys.odcinumberlist(10, 20, 30, 40, 50, 60, 70, 80, 90)))
  SELECT d FROM dates
  UNION SELECT d + 1 FROM dates
  UNION SELECT d + 2 FROM dates
  UNION SELECT d + 3 FROM dates
  UNION SELECT d + 4 FROM dates
  UNION SELECT d + 5 FROM dates
  UNION SELECT d + 6 FROM dates
  UNION SELECT d + 7 FROM dates
  UNION SELECT d + 8 FROM dates
  UNION SELECT d + 9 FROM dates


Есть ли возможность воспользоваться циклом в данном случае?
10 июн 21, 15:57    [22333914]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли использовать UNION внутри LOOP?  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7498
select level + 9 d from dual connect by level <= 90;
10 июн 21, 16:50    [22333950]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли использовать UNION внутри LOOP?  [new]
another_login
Member

Откуда:
Сообщений: 3
env,

А применительно к таблице, полученной подзапросом, в примере, для краткости заменённой:
select COLUMN_VALUE d from table(sys.odcinumberlist(10, 20, 30, 40, 50, 60, 70, 80, 90))
10 июн 21, 16:59    [22333956]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли использовать UNION внутри LOOP?  [new]
booby
Member

Откуда:
Сообщений: 2543
-- 1)
WITH dates AS (select COLUMN_VALUE d from table(sys.odcinumberlist(10, 20, 30, 40, 50, 60, 70, 80, 90)))
, shifts AS (select COLUMN_VALUE shift from table(sys.odcinumberlist(0, 1, 2, 3, 4, 5, 6, 7, 9)))
Select dt.d + sht.shift as d
From dates dt, shifts sht
Order by 1;

--2)
WITH dates AS (select COLUMN_VALUE d from table(sys.odcinumberlist(10, 20, 30, 40, 50, 60, 70, 80, 90)))
, r_dates(dstart, d, lv) as (
  Select d as dstart, d , 1 as lv
  From dates 
  Union All 
  Select dstart, dstart + lv, lv + 1
  From r_dates 
  Where 
  1 = 1 
  and lv < 10
)
SEARCH DEPTH FIRST BY D SET rn
Select * from r_dates
;

--3)
WITH dates AS (select COLUMN_VALUE d from table(sys.odcinumberlist(10, 20, 30, 40, 50, 60, 70, 80, 90)))
select d as dstart, d+level-1 as dd , level as lv
from dates
connect by d = prior d  and level <= 10
and prior dbms_random.value is not null
10 июн 21, 17:06    [22333960]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли использовать UNION внутри LOOP?  [new]
another_login
Member

Откуда:
Сообщений: 3
booby, отлично, спасибо, №1 подошёл в моём случае.
11 июн 21, 09:04    [22334171]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить