вопрос по oracle
От: aios  
Дата: 16.01.19 06:18
Оценка:
допустим есть функция

function pc_ProcessDetailesRep(start_date in date) return t_ProcessDetailesItem_dataset pipelined


возвращает некий датасет. требуется дергать ее увеличивая дату в цикле в неком интервале дат и вернуть то что она возвращает в виде одной объединенной выборки.
на mssql подобная хрень как два пальца. тут всю голову уже сломал (((
Re: вопрос по oracle
От: Dym On Россия  
Дата: 16.01.19 06:36
Оценка:
Здравствуйте, aios, Вы писали:

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

function pc_ProcessDetailesRep(start_date in date) return t_ProcessDetailesItem_dataset pipelined

A>возвращает некий датасет. требуется дергать ее увеличивая дату в цикле в неком интервале дат и вернуть то что она возвращает в виде одной объединенной выборки.
A>на mssql подобная хрень как два пальца. тут всю голову уже сломал (((
А в чем проблема-то? Вернуть датасет? Посмотри на ref cursor.
Счастье — это Glück!
Отредактировано 16.01.2019 6:38 Dym On . Предыдущая версия .
Re: вопрос по oracle
От: LuciferNovoros Россия  
Дата: 16.01.19 08:28
Оценка:
Здравствуйте, aios, Вы писали:

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


A>
A>function pc_ProcessDetailesRep(start_date in date) return t_ProcessDetailesItem_dataset pipelined
A>


A>возвращает некий датасет. требуется дергать ее увеличивая дату в цикле в неком интервале дат и вернуть то что она возвращает в виде одной объединенной выборки.


А зачем ее дергать в цикле? Перепиши функцию, чтоб она принимала два параметра даты. И дергай сразу полный датасет за этот период. Если функцию переписать нельзя, то сделай ее просто overload и все. В чем проблема-то?
Re[2]: вопрос по oracle
От: aios  
Дата: 16.01.19 09:14
Оценка:
LN>А зачем ее дергать в цикле? Перепиши функцию, чтоб она принимала два параметра даты. И дергай сразу полный датасет за этот период. Если функцию переписать нельзя, то сделай ее просто overload и все. В чем проблема-то?

да задолбаюсь переписывать. оракл знаю на уровне стандарта sql практически. на mssql сидел. мата уже практически не остается....
Re[3]: вопрос по oracle
От: Gt_  
Дата: 16.01.19 09:23
Оценка:
LN>>А зачем ее дергать в цикле? Перепиши функцию, чтоб она принимала два параметра даты. И дергай сразу полный датасет за этот период. Если функцию переписать нельзя, то сделай ее просто overload и все. В чем проблема-то?

A>да задолбаюсь переписывать. оракл знаю на уровне стандарта sql практически. на mssql сидел. мата уже практически не остается....


это не повод в индуском стиле долбить в цикле. за такое и в мсскл больно бьют

Gt_
Re[4]: вопрос по oracle
От: aios  
Дата: 16.01.19 09:52
Оценка:
Gt_>это не повод в индуском стиле долбить в цикле. за такое и в мсскл больно бьют

это разовая выгрузка так что мне как-то пофигу....
Re[5]: вопрос по oracle
От: Gt_  
Дата: 16.01.19 09:59
Оценка:
Gt_>>это не повод в индуском стиле долбить в цикле. за такое и в мсскл больно бьют

A>это разовая выгрузка так что мне как-то пофигу....


тогда и делай в майкрософтском стиле — global temporary table и туда инсерты в цикле
Re[6]: вопрос по oracle
От: aios  
Дата: 16.01.19 10:05
Оценка:
Gt_>тогда и делай в майкрософтском стиле — global temporary table и туда инсерты в цикле

видимо так и придется (

а на майкрософте я бы выдрал селект из функции и его подправил под свои нужды. на оракле мне это пока слабО....
Re[7]: вопрос по oracle
От: IZM  
Дата: 17.01.19 18:29
Оценка: 2 (1)
Так не пойдет?
Select q.dt, qq.*
From
(Select (Trunc(Sdate) +Level-1) as Dt
From dual
Connect by level< (trunc(Edate) — Trunc(Sdate) +1)
) q
Join table(pc_ProcessDetailesRep(q.dt)) qq on (1=1)
Re[8]: вопрос по oracle
От: aios  
Дата: 18.01.19 06:15
Оценка:
Здравствуйте, IZM, Вы писали:

IZM>Так не пойдет?

IZM>Select q.dt, qq.*
IZM>From
IZM>(Select (Trunc(Sdate) +Level-1) as Dt
IZM> From dual
IZM> Connect by level< (trunc(Edate) — Trunc(Sdate) +1)
IZM>) q
IZM> Join table(pc_ProcessDetailesRep(q.dt)) qq on (1=1)


блин. знал бы что это джойнить можно )))) и про connect до тебя не знал
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.