Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как организовать цикл? / 9 сообщений из 9, страница 1 из 1
16.01.2019, 09:24
    #39760110
Dmitry1979
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
в оракле полный нуб

допустим есть функция

Код: plsql
1.
function pc_ProcessDetailesRep(start_date in date) return t_ProcessDetailesItem_dataset pipelined




возвращает некий датасет. требуется дергать ее увеличивая дату в цикле в неком интервале дат и вернуть то что она возвращает в виде одной объединенной выборки.
на mssql подобная хрень как два пальца. тут всю голову уже сломал (((
...
Рейтинг: 0 / 0
16.01.2019, 09:26
    #39760112
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
Dmitry1979в неком интервале дат ТОП №11
...
Рейтинг: 0 / 0
16.01.2019, 09:34
    #39760120
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
Dmitry1979,

что не получается, пройтись по интервалу или вернуть?

....
stax
...
Рейтинг: 0 / 0
16.01.2019, 09:39
    #39760124
Dmitry1979
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
Stax,

просто не понимаю как это организовать. в mssql если бы возникла такая задача - просто бы вставлял во временную таблицу (тем более задача разовая и на производительность вообще пофиг) потом бы сделал из нее select. как это делается в oracle?
...
Рейтинг: 0 / 0
16.01.2019, 09:48
    #39760134
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
Dmitry1979,

Коррелированыий джоин на генератор.
...
Рейтинг: 0 / 0
16.01.2019, 09:50
    #39760136
Dmitry1979
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
-2-,

а это что за зверь?
...
Рейтинг: 0 / 0
16.01.2019, 10:06
    #39760144
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
Dmitry1979Stax,

просто не понимаю как это организовать. в mssql если бы возникла такая задача - просто бы вставлял во временную таблицу (тем более задача разовая и на производительность вообще пофиг) потом бы сделал из нее select. как это делается в oracle?

если разовая, сделайте на pl/sql и не партесь

....
stax
...
Рейтинг: 0 / 0
16.01.2019, 10:39
    #39760157
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
Dmitry1979,

если селектом, то самое простое (через гланды)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SQL> ed
Wrote file afiedt.buf

  1  with t as (--генерим диапазон
  2  select level*10 from dual connect by level <=3 )
  3  select
  4    cast(
  5     multiset(select f.*
  6      from dept d,table(emp_pipe_stax(d.deptno)/* ваша ф-ція */) f )
  7*    as emp_tt /* ваш тіп */) emp_tt from dual
SQL> /

EMP_TT(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
----------------------------------------------------------------------------
EMP_TT(EMP_T(7782.000, 'CLARK', 'MANAGER', 7839.000, '09.06.81', 2450.000, N
82', 1300.000, NULL, 10.000), EMP_T(7369.000, 'SMITH', 'CLERK', 7902.000, '1
LYST', 7566.000, '09.12.82', 3000.000, NULL, 20.000), EMP_T(7876.000, 'ADAMS
(7499.000, 'ALLEN', 'SALESMAN', 7698.000, '20.02.81', 1600.000, 300.000, 30.
.81', 1250.000, 1400.000, 30.000), EMP_T(7698.000, 'BLAKE', 'MANAGER', 7839.
MES', 'CLERK', 7698.000, '03.12.81', 950.000, NULL, 30.000))



.....
stax
...
Рейтинг: 0 / 0
16.01.2019, 10:40
    #39760158
merch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как организовать цикл?
Код: 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.
create table test_pipe(id number);

begin
  insert into test_pipe(id)
  select level from dual
  connect by level <= 5;
  commit;
end;
/

create or replace function test_pipe_fnc(id_inc number) return sys.odcinumberlist as
  l_id_table      sys.odcinumberlist := sys.odcinumberlist();
begin
    select id bulk collect into l_id_table from test_pipe where id > id_inc;    
    return l_id_table;
end;
/


with iteration_list(num) as
(
  select level from dual
  connect by level <= 2
)
select 
  il.num          as iteration_num,
  pt.column_value as dyn_dataset
from 
iteration_list il
cross join table(test_pipe_fnc(il.num)) pt;

drop table test_pipe purge;
drop function test_pipe_fnc;
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как организовать цикл? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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