powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / возвращаемый тип данных в pipelined function
51 сообщений из 51, показаны все 3 страниц
возвращаемый тип данных в pipelined function
    #36139683
Roxen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Есть несколько pipelined functions (show_table1, show_table2 и т д.), которые возвращают тип TYPE CP_T IS TABLE OF CP_CUR%ROWTYPE где CP_CUR - это курсор содержащий запрос к определенной таблице. Хочу сделать pipelined функцию, которой буду передавать название таблицы, а она будет вызывать уже ту pipelined ф-цию, которая возвращает из той таблички данные.

Нужно следующиее:
Код: plaintext
1.
2.
3.
4.
5.
6.
create or replace
FUNCTION f(v_tab_name VARCHAR2) RETURN ??? PIPELINED IS 
BEGIN
-- смотрим какое название таблицы передали и вызываем нужную ф-цию --
....
END;

Только вот какой тип данных будет возвращать??? Функции то вызываемые на разных курсорах основаны.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139689
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чего-то Вы такого хотите...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139695
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык начинающих программистов завсегда тянет на универсальность :)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139807
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roxen,

это Вы решили собственный вариант оператора SELECT сделать? Чтобы имя таблицы в функцию передавать, а не указывать во FROM...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139889
Roxen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLerRoxen,

это Вы решили собственный вариант оператора SELECT сделать? Чтобы имя таблицы в функцию передавать, а не указывать во FROM...

Мне не нужен SELECT. От селектов я ухожу, т.к. при изменении таблиц летят приложения на них постороенные. Вот я и "зашиваю" выборку в функцию. Тем более там селект с использованием пяти таблиц.

Просто вместо того чтобы давать разработчикам приложений кучу функций для выборки из разных таблиц я хочу дать ОДНУ, где только нужно будет указать название таблицы.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36139997
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RoxenМне не нужен SELECT. От селектов я ухожу, т.к. при изменении таблиц летят приложения на них постороенные.

... Как страшно жить! (с) А. И. Куприн.

И куда летят эти приложения? Там в них случайно не SELECT * FROM ... используется?

Если уж Вы так часто меняете таблицы и не хотите напрягать разработчиков приложений, то используйте представления. Изменилась таблица - изменилось и представление. А приложение об этом и не узнало...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140204
p
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
p
Гость
Может возвращать из функции курсор? Мы именно так и делаем. И приложению вовсе не надо знать имена таблиц. По-моему у Тома Кайта на эту тему написано хорошо.
что-то вроде

case p_table_code
when 1 then
open p_cursor as
select ... from table_1;
when 2 then
open p_cursor as
select ... from table_2;
....

С точки зрения БД возвращать курсоры намного лучше чем в приложении селектить из пипилизированных функций.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140268
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roxen,

То что Вы хотите не реализуемо нормальными методами. БД это Вам не ООП с расследованиями и типом данных VARIANT :) она( БД ) не для этих целей.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140272
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p
С точки зрения БД возвращать курсоры намного лучше чем в приложении селектить из пипилизированных функций.
Это чем же лучше? А чем хуже( или внезапно ВСЕМ лучше )? И в каких ситуйовинах. Где исследования? Где факты? Где лулзы в конце концов?!
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140514
AnyDataSet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваи нужно использовать AnyDataSet табличные функции, те функции которые определяют структуру возвращаемого курсора в run-time
Вот хорошая статья где описывается этот метод

method 4 dynamic sql in pl/sql
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140521
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnyDataSetВаи нужно использовать AnyDataSet табличные функции, те функции которые определяют структуру возвращаемого курсора в run-time
Вот хорошая статья где описывается этот метод

method 4 dynamic sql in pl/sql

вот только вот вас (, AnyDataSet) топикстартеру и не хватало для счастья ,
как только запросы из своей прикладнухи доповыкинет

хотя,.. какой вопрос-такой ответ..
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36140571
AnyDataset
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to orawish

Я чо-то тебя не понял:

прозвучал конкретный вопрос
получен чисто конкретный ответ

В чем проблема ?
:-)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36154666
Roxen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рада что нашлись люди, которые поняли что я имею ввиду.

AnyDataset ,
Огромное спасибо за ссылочку. Она мне очень пригодилась. Вот тоже ссылка неплохая на эту тему.

Любителям постебаться, таким как orawish , рекомендую почитать дабы в будущем быть поскромнее.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #36154689
Lecter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roxen,

"Как страшно жить..."(С)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
возвращаемый тип данных в pipelined function
    #37024547
Фотография MaratSH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnyDataSet,

у меня нет типа sys.ODCITabFuncInfo
версия оракла:
Oracle9i Enterprise Edition Release 9.2.0.8.0

Что делать :) ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
возвращаемый тип данных в pipelined function
    #37613095
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55дык начинающих программистов завсегда тянет на универсальность :)


Конечно! И только продуманные старпёры из отделов АСУ обожают дбфы и если уж и перелезли на оракл, то предпочитают накопипастить тыщщу отчётов с разными группировками и менять их все при изменении одного условия или добавлении одного фильтра.

Спрашивал в другой ветке про вызов селекта из курсора, так там такой же, нет бы, сказать про Pipelined, начал так же глубокомысленно гнуть пальцы...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613114
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1tru55дык начинающих программистов завсегда тянет на универсальность :)

Конечно! И только продуманные старпёры из отделов АСУ обожают дбфы и если уж и перелезли на оракл, то предпочитают накопипастить тыщщу отчётов с разными группировками и менять их все при изменении одного условия или добавлении одного фильтра.
Спрашивал в другой ветке про вызов селекта из курсора, так там такой же, нет бы, сказать про Pipelined, начал так же глубокомысленно гнуть пальцы...

Ты вообще внимательно прочитал топик? Тут суть не в pipelined, а в том, что человек хотел сделать одну функцию для работы с разными таблицами, что автоматом влечет применение dynamic SQL. А применение dynamic SQL в общем случае ведет к потере производительности. Или для тебя важнее, чтобы меньше писать кода, а что там с производительностью - наплевать?

К слову сказать, какое отношение dbf-ки имеют к тысяче отчетов?
Ну и совсем для сведения: файлы Oracle тоже могут иметЬ расширение dbf
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613124
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roxen, Приведи пожалуйста пример такой функции.

У меня тоже проблема, есть один запрос, который надо фильтровать сначала, а потом в разных разрезах, с разными группировками выводить.

Типа сколько выездов сделала каждая бригада с такого-то по такое-то, или то же, но + с определёнными диагнозами. /это по фильтрам
Потом сколько выездов сделали бригады подстанции - тоже с фильтрами.

В общем я придумал вынести в PIPELINED функцию запрос. Там прописать фильтры, данные из которых буду передавать в процедуру, а возвращаться будет отфильтрованная таблица. И как раз этот результат уже буду группировать в разных разрезах и позах.

Так и при любом изменении количества фильтров функцию подправил и всё ок.

Но не хочу делать для каждой вьюшки свой тип чтобы не менять их при изменении вьюшки и пытаюсь сделать как раз %ROWTYPE но нифига не выходит...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION filterTable 
  RETURN dic_call_reject%ROWTYPE PIPELINED
is
  cur SYS_REFCURSOR;
  r dic_call_reject%ROWTYPE;
BEGIN
  
open  cur FOR SELECT * FROM dic_call_reject dcr
                ;

   loop
       fetch cur INTO r;
       exit when cur%notfound;
      PIPE ROW(r);
  END loop;
  RETURN;
END;



Это тест, на котором я хочу опробовать... Выдаёт соответственно ошибку.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613129
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55,

Ладно, погорячился. Просто меня тоже так послали вместо ответа. Сори. Лучше подскажи по теме. Ну и думаю про дбфы ты понял, просто постебаться решил ;)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613136
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1,

хотеть не вредно. а проза жизни в том, что булки на деревьях не растут
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613144
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1фильтровать сначала, а потом в разных разрезах, с разными группировками выводить.
Для решения этой задачи существуют специально обученные инструменты имени [R]OLAP
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613158
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55применение dynamic SQL в общем случае ведет к потере производительностиАга, любимая мифо-страшилка от О дминов. Это фигня, по сравнению с сопровождаемостью.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613163
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elictru55применение dynamic SQL в общем случае ведет к потере производительностиАга, любимая мифо-страшилка от О дминов. Это фигня, по сравнению с сопровождаемостью.
Все от кривых рук.
По-настоящему оторваться можно на EAV :)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613172
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdmitryk1фильтровать сначала, а потом в разных разрезах, с разными группировками выводить.
Для решения этой задачи существуют специально обученные инструменты имени [R]OLAP

Ты в курсе сколько оно стоит?
Или считаешь мне имеет смысл послать начальство посоветовав купить ентерпрайз?
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613176
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishdmitryk1,

хотеть не вредно. а проза жизни в том, что булки на деревьях не растут
Ну да. Полезный ответ. Спасибо.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613185
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1Ты в курсе сколько оно стоит?
Дмитрий, а Вы хотя бы приблизительно в курсе во что обходится работодателю содержать программиста, который уже сам запутался в собственной разработке?
А в случае с "универсальной функцией" на DSQL это случится раньше чем можно предположить :)
В этом аспекте разумное начальство нередко готово рассматривать вариант приобретения необходимого инструмента.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613215
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
Андрей, боюсь мы отклонились от темы. Если есть желание можете обсудить с моим руководством замену меня на ентерпрайз оракл и человека который будет там писать запросы. И обосновать что это дешевле и проще.

А по теме что-то есть?
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613223
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1orawishdmitryk1,

хотеть не вредно. а проза жизни в том, что булки на деревьях не растут
Ну да. Полезный ответ. Спасибо.
на здоровье.
авторНо не хочу делать для каждой вьюшки свой тип чтобы не менять их при изменении вьюшки и пытаюсь сделать как раз %ROWTYPE но нифига не выходит...
почитайте документацию про pipelined, поймите, что такое pipelined и тогда (надеюсь) .. дойдёт
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613258
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1А по теме что-то есть?
По теме - pipelined не для Вас.
Эта штука предполагает типизованный результат.
Можете конечно почитать про типы AnyData, AnyDataSet, но - поверьте на слово - овчинка выделки не стоит.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613268
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Ну если бы вы читали то что я раньше написал, то увидели бы, что вопрос именно по ним.

А точнее как pipelined функции использовать не статически созданный тип и его коллекцию а тип курсора используемого для выборки параметров.

Чтобы я мог изменять вьюшку как хочу и это не требовало изменения функции или типа.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE FUNCTION NAIS.filterTable 
  RETURN dic_call_reject%ROWTYPE PIPELINED
AS
  cur SYS_REFCURSOR;
    r dic_call_reject%ROWTYPE;
BEGIN
  
open  cur FOR SELECT * FROM dic_call_reject dcr
                ;

   loop
       fetch cur INTO r;
       exit when cur%notfound;
      PIPE ROW(r);
  END loop;
  RETURN;
END;



Кстати вы первый кто вспомнил про эти функции при разговоре на эту тему. Может вы и сможете закрыть вопрос и подсказать - как.

Я так понимаю. топикстартер в лохматые ... какие там, эту проблему решил ещё до того как у него возникла новая хотелка :) Только вот найдётся ли он сейчас. А то может он тоже на олап перешёл уже давно.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613284
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Я почему тут начал писать - прочитал в первом посте:
Есть несколько pipelined functions (show_table1, show_table2 и т д.), которые возвращают тип TYPE CP_T IS TABLE OF CP_CUR%ROWTYPE где CP_CUR - это курсор содержащий запрос к определенной таблице

То есть моя проблема у человека уже решена.


Ну а возможность вместо изменения десятков запросов путём вставки в каждый
Код: sql
1.
and t.id=:street_id

при очередном всплеске активности заинтересованных лиц, добавить это в одну PIPELINED функцию многое перевешивает.

Хотя если вы предложите другой работающий вариант не требующий больших деньгозатрат (на данный момент это нереально) я с удовольствием за него ухвачусь!
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613309
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1orawish,

Ну если бы вы читали то что я раньше написал, то увидели бы, что вопрос именно по ним.

А точнее как pipelined функции использовать не статически созданный тип и его коллекцию а тип курсора используемого для выборки параметров.

Чтобы я мог изменять вьюшку как хочу и это не требовало изменения функции или типа.

Код: sql
1.
..



Кстати вы первый кто вспомнил про эти функции при разговоре на эту тему. Может вы и сможете закрыть вопрос и подсказать - как.

Я так понимаю. топикстартер в лохматые ... какие там, эту проблему решил ещё до того как у него возникла новая хотелка :) Только вот найдётся ли он сейчас. А то может он тоже на олап перешёл уже давно.
постом выше - andrey_anonymous - все уже сказал.
как трамваю нужны рельсы, так конвейеру нужен предопределенный (до компиляции спецификации программной единицы с той функцией) sql-тип.
можно создать тип с избыточным набором столбцов или заниматься распаковкой данных
(упакованных в том пайплайне в недрах атрибутов того типа), но переопределять тип нельзя
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613323
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1Ну если бы вы читали то что я раньше написал, то увидели бы, что вопрос именно по ним.

А точнее как pipelined функции использовать не статически созданный тип и его коллекцию а тип курсора используемого для выборки параметров.Невменяемы клиент на ручнике.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613330
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Кхм...
Ещё раз. Человек, в первом посте сказал что у него это работает и он хочет усложнить.

Не вижу причин ему не верить. Ваши аргументы понимаю, однако надеюсь всё-таки на что-то подкреплённое ссылками, хотя бы.
Со статичным типом будет работать, это написано во многих источниках. Где написано что не будет работать с динамическим? Хотя это и не динамический, это копия определённого в базе типа.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613339
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1,

А возвращять XMLType не проще? И овцы сыты и волки целы.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613374
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1orawish,

Кхм...
Ещё раз. Человек, в первом посте сказал что у него это работает и он хочет усложнить.

Не вижу причин ему не верить. Ваши аргументы понимаю, однако надеюсь всё-таки на что-то подкреплённое ссылками, хотя бы.
Со статичным типом будет работать, это написано во многих источниках. Где написано что не будет работать с динамическим? Хотя это и не динамический, это копия определённого в базе типа.
где, где. дык в эскуэльреференсе и написано. черным по белому
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613375
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Я пробовал
Код: sql
1.
SELECT * FROM table(xmlsequence(filtertable));

.

В селект возвращались строки одной колонки, типа
Код: xml
1.
2.
<row><a>1</a><b>2</b></row>
<row><a>3</a><b>4</b></row>



Однако как осуществлять последующую группировку с выводом не хмля в результат, а обычного результата селекта?

Парсить вручную явно не вариант, да и преобразования показались мне тяжёлыми.

Может есть пара примеров ? В принципе вполне пристойный вариант бы получился, я думаю.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613395
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Может я неправильно перевёл оттуда:

[quote RETURN Data Type ]You can use SQL data types ANYTYPE, ANYDATA, and ANYDATASET to dynamically encapsulate and access type descriptions, data instances, and sets of data instances of any other SQL type, including object and collection types. You can also use these types to create unnamed types, including anonymous collection types. For information about these types, see Oracle Database PL/SQL Packages and Types Reference.[/quote]

Но насколько позволяет моё знание иностранных языков, здесь написано что возвращать динамические типы вполне возможно...

За ссылку спасибо.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613398
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1,

xmlsequence нынче не в моде, объявлен deprecated

Да и можно вываливать XML клиенту, а он его XLST преобразованием в отчет.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613435
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Это получится группировка на клиенте. Боюсь у нас клиенты этого не потянут :(

И опять же переезд части логики из базы на аппликейшин сервер или на клиента, что тоже распыление логики которого очень хочется избежать, и получить унифицированный подход, то есть, в данном случае, потребовалось изменить что-то - меняем в одном месте (в базе) понадобилось добавить новый отчёт или удалить - то же.

Попробую поискать про преобразование хмл и дальнейшую работу как с таблицей.

Спасибо за помощь. От примеров бы, всё-таки не отказался ;)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613517
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1возвращать динамические типы вполне возможно...
Не човчем.
Я уже указывал что можно почитать про эти типы, но - повторюсь - овчинка не стоит выделки.

Предельным случаем подобной "универсальности", повторюсь, является EAV (известная так же под ником "модель Тенцера").
Надо ли Вам оно...

В конечном итоге запросы оказываются тесно связаны с текущей версией приложения.
При доработках править приходится не столько условия отбора, сколько состав и типы данных, возвращаемые запросом. А тут как раз и случается прогнозируемый нежданчик - новые структуры обычно нуждаются в соответствующей логике на стороне клиента (как минимум - в "презентационной"), поэтому затраты на "поправить текст запроса" на круг не так уж велики в сравнении с "поправить формы/кнопки/логику приложения".

...что до "поправить в одной процедуре" - за годы пришел к выводу, что это утопия.
Вернее, случаи, когда это актуально, исчисляются долями процента среди общего объема задач по сопровождению кода.
И изобретать тут лучше не "единую универсальную процедуру", коей, собственно, и является sql-интерфейс, а процесс генерации "типового" SQL-кода по шаблонам. Поправили шаблон - сгенерировали потребный SQL.
Собственно, примерно так и работают крупные аппликухи вроде того же зибеля - разраб определяет "высокоуровневую" структуру данных, рисует формочку/логику, а уж ddl к таблицам и sql генерируется автомагически.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613698
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Про модель Тенцера буду читать. А про набор запросов сгенерированных по условию... Как то даже не задумывался. Спасибо за идею. Хотя как-то она меня смущает. Но буду думать и в этом направлении.
Насчёт клиентской части я не особо волнуюсь потому что это именно отчёты, то есть дальнейшая обработка на клиенте - это перечисление столбцов, отображение хтмл страницы и может дополнительная клиентская сортировка\фильтрация, но это сильно опционально. И усложнение в обшем то будет идти со стороны базы и серверной логики - выдача всё большего числа отчётов по разным как предопределённым, возможно даже предыдущими запросами, так и введённым критериям.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613747
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1orawish,

Может я неправильно перевёл оттуда:

[quot RETURN Data Type ]You can use SQL data types ANYTYPE, ANYDATA, and ANYDATASET to dynamically encapsulate and access type descriptions, data instances, and sets of data instances of any other SQL type, including object and collection types. You can also use these types to create unnamed types, including anonymous collection types. For information about these types, see Oracle Database PL/SQL Packages and Types Reference.

Но насколько позволяет моё знание иностранных языков, здесь написано что возвращать динамические типы вполне возможно...

За ссылку спасибо.[/quot]
а вот и нет. заковыка в том, что data types ANYTYPE, ANYDATA, and ANYDATASET - это имена собственные
(т.е. не любой тип а конкретный сисовский тип, с гордым названием "Любой" и т.д.)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613815
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Не знаете почему я не люблю sql и oracle?
я до этой темы задал вопрос вот тут может ещё какие мысли появятся ну и народ там тоже грамотный собрался...
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613831
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..и Вам там ответили: МОЖНО.
Называется
Код: plsql
1.
grouping sets


Частные случаи:
Код: plsql
1.
rollup, cube



Но вместо того чтобы изучить новые пассатижи - кое-кто начал канючить в стиле "...гранаты у него не той системы" (с)
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613843
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1orawish,

Не знаете почему я не люблю sql и oracle?
я до этой темы задал вопрос вот тут может ещё какие мысли появятся ну и народ там тоже грамотный собрался...
почему не любите - смутно догадываюсь (элементарно, не владеете основами)
соседнюю тему посетил. извините, но имхо та тема не более чем мутный поток сознания, которое не знает чего хочет.
кому нужен отчет - тот делает отчет. в инструментах соответствующих обычно поддерживаются параметры.
при чем тут вью да и база данных, вообще?
видно и инструментом, в котором вы отчеты лабаете, тоже не шибко владеете
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613858
dmitryk1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

Ну да, не владею. не люблю инструменты которые подразумевают долгое и муторное написание дублирующегося кода там, где любой другой инструмент обходится несколькими строками.

Групинсет - там есть пример нескольких идущих подряд запросов.

типа такого:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select ... from
а where день=:сегодня
and fio =:петров
and дата продажи=:сегодня+3
and покупатели in (select id from users where родственник =:петров and знакомый =:петров)
group by Товар
order by time



Представьте что они объединены и между ними прослойки названий подгруппы. Я такое смогу реализовать с помощью групинсетс? Насколько я про него прочитал и попробовал - нет.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #37613868
Bfink
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryk1где любой другой инструмент обходится несколькими строками

Вам нужен "любой другой инструмент". Если вопрос в цене, то возьмите вместо Oracle MySQL.
То, что Вы указали пишется на простом SQL.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
возвращаемый тип данных в pipelined function
    #39838214
SQLdna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roxen,
Вся проблема универсальности заключается в необходимости описания УНИВЕРСАЛЬНОГО (для любой таблицы) типа который возвращает pipilined.
Проблема решается по дедовски в обход путём созданием спецификации пакета (например), а в нём уже - типа под динамически назначаемую таблицу (выступающую в нашем случае как параметр)
Сначала создаем эту спецификацию пакета:
Код: plsql
1.
2.
3.
create or replace package pip4 is  -- its 4 pip function
  TYPE t_table IS TABLE OF ANY_TABLE_U_LIKE%ROWTYPE;
end;



А потом пред вызовом PIPELINED функции переопределяем его:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare
  p_TABLE_NAME varchar2(320) := 'ANY_TABLE_U_LIKE';
  i            number;
begin
/**/
execute immediate '
create or replace package pip4 is  -- its 4 pip function
  TYPE t_table IS TABLE OF ' || p_TABLE_NAME || '%ROWTYPE;
end;';
commit;

  select count(1) into i from table(pip(p_TABLE_NAME));
  dbms_output.put_line('i= ' || i);
  
end;
--  select count(1)   from table(pip('ANY_TABLE_U_LIKE'))



Сама функция выглядит вот так, например:
Код: 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.
CREATE OR REPLACE FUNCTION PIP (p_TABLE_NAME varchar2) RETURN pip4.t_table
  PIPELINED IS
  pragma AUTONOMOUS_TRANSACTION;
  c_ref sys_refcursor;
  v_SQLtext varchar2(32000) := 'select * from ' || p_TABLE_NAME;
  results pip4.t_table;
begin

  /*execute immediate '   -- ТАК К СОЖАЛЕНИЮ НЕ РАБОТАЕТ
  create or replace package test is
    TYPE t_table IS TABLE OF '||p_TABLE_NAME||'%ROWTYPE;
    end;';*/

  OPEN c_ref FOR v_SQLtext;
  LOOP
    FETCH c_ref BULK COLLECT
      INTO results LIMIT 1000;
    FOR i IN 1 .. results.count LOOP
      PIPE ROW(results(i));
    END LOOP;
    EXIT WHEN c_ref%NOTFOUND;
  END LOOP;
  CLOSE c_ref;

  RETURN;
END;
/
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #39838223
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLdnaпред вызовом PIPELINED функции переопределяем егоТут главное, не пускать других в БД, пока такие гении в БД продакшн есть.
...
Рейтинг: 0 / 0
возвращаемый тип данных в pipelined function
    #39842498
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLdnaПроблема решается по дедовски
....лля, как бы это развидеть...
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / возвращаемый тип данных в pipelined function
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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