|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1Ты в курсе сколько оно стоит? Дмитрий, а Вы хотя бы приблизительно в курсе во что обходится работодателю содержать программиста, который уже сам запутался в собственной разработке? А в случае с "универсальной функцией" на DSQL это случится раньше чем можно предположить :) В этом аспекте разумное начальство нередко готово рассматривать вариант приобретения необходимого инструмента. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:01 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
andrey_anonymous, Андрей, боюсь мы отклонились от темы. Если есть желание можете обсудить с моим руководством замену меня на ентерпрайз оракл и человека который будет там писать запросы. И обосновать что это дешевле и проще. А по теме что-то есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:09 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1orawishdmitryk1, хотеть не вредно. а проза жизни в том, что булки на деревьях не растут Ну да. Полезный ответ. Спасибо. на здоровье. авторНо не хочу делать для каждой вьюшки свой тип чтобы не менять их при изменении вьюшки и пытаюсь сделать как раз %ROWTYPE но нифига не выходит... почитайте документацию про pipelined, поймите, что такое pipelined и тогда (надеюсь) .. дойдёт ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:12 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1А по теме что-то есть? По теме - pipelined не для Вас. Эта штука предполагает типизованный результат. Можете конечно почитать про типы AnyData, AnyDataSet, но - поверьте на слово - овчинка выделки не стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:21 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
orawish, Ну если бы вы читали то что я раньше написал, то увидели бы, что вопрос именно по ним. А точнее как pipelined функции использовать не статически созданный тип и его коллекцию а тип курсора используемого для выборки параметров. Чтобы я мог изменять вьюшку как хочу и это не требовало изменения функции или типа. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Кстати вы первый кто вспомнил про эти функции при разговоре на эту тему. Может вы и сможете закрыть вопрос и подсказать - как. Я так понимаю. топикстартер в лохматые ... какие там, эту проблему решил ещё до того как у него возникла новая хотелка :) Только вот найдётся ли он сейчас. А то может он тоже на олап перешёл уже давно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:24 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
andrey_anonymous, Я почему тут начал писать - прочитал в первом посте: Есть несколько pipelined functions (show_table1, show_table2 и т д.), которые возвращают тип TYPE CP_T IS TABLE OF CP_CUR%ROWTYPE где CP_CUR - это курсор содержащий запрос к определенной таблице То есть моя проблема у человека уже решена. Ну а возможность вместо изменения десятков запросов путём вставки в каждый Код: sql 1.
при очередном всплеске активности заинтересованных лиц, добавить это в одну PIPELINED функцию многое перевешивает. Хотя если вы предложите другой работающий вариант не требующий больших деньгозатрат (на данный момент это нереально) я с удовольствием за него ухвачусь! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:30 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1orawish, Ну если бы вы читали то что я раньше написал, то увидели бы, что вопрос именно по ним. А точнее как pipelined функции использовать не статически созданный тип и его коллекцию а тип курсора используемого для выборки параметров. Чтобы я мог изменять вьюшку как хочу и это не требовало изменения функции или типа. Код: sql 1.
Кстати вы первый кто вспомнил про эти функции при разговоре на эту тему. Может вы и сможете закрыть вопрос и подсказать - как. Я так понимаю. топикстартер в лохматые ... какие там, эту проблему решил ещё до того как у него возникла новая хотелка :) Только вот найдётся ли он сейчас. А то может он тоже на олап перешёл уже давно. постом выше - andrey_anonymous - все уже сказал. как трамваю нужны рельсы, так конвейеру нужен предопределенный (до компиляции спецификации программной единицы с той функцией) sql-тип. можно создать тип с избыточным набором столбцов или заниматься распаковкой данных (упакованных в том пайплайне в недрах атрибутов того типа), но переопределять тип нельзя ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:40 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1Ну если бы вы читали то что я раньше написал, то увидели бы, что вопрос именно по ним. А точнее как pipelined функции использовать не статически созданный тип и его коллекцию а тип курсора используемого для выборки параметров.Невменяемы клиент на ручнике. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:46 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
orawish, Кхм... Ещё раз. Человек, в первом посте сказал что у него это работает и он хочет усложнить. Не вижу причин ему не верить. Ваши аргументы понимаю, однако надеюсь всё-таки на что-то подкреплённое ссылками, хотя бы. Со статичным типом будет работать, это написано во многих источниках. Где написано что не будет работать с динамическим? Хотя это и не динамический, это копия определённого в базе типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:49 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1, А возвращять XMLType не проще? И овцы сыты и волки целы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 15:51 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1orawish, Кхм... Ещё раз. Человек, в первом посте сказал что у него это работает и он хочет усложнить. Не вижу причин ему не верить. Ваши аргументы понимаю, однако надеюсь всё-таки на что-то подкреплённое ссылками, хотя бы. Со статичным типом будет работать, это написано во многих источниках. Где написано что не будет работать с динамическим? Хотя это и не динамический, это копия определённого в базе типа. где, где. дык в эскуэльреференсе и написано. черным по белому ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 16:02 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
Сергей Арсеньев, Я пробовал Код: sql 1.
. В селект возвращались строки одной колонки, типа Код: xml 1. 2.
Однако как осуществлять последующую группировку с выводом не хмля в результат, а обычного результата селекта? Парсить вручную явно не вариант, да и преобразования показались мне тяжёлыми. Может есть пара примеров ? В принципе вполне пристойный вариант бы получился, я думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 16:02 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
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] Но насколько позволяет моё знание иностранных языков, здесь написано что возвращать динамические типы вполне возможно... За ссылку спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 16:09 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1, xmlsequence нынче не в моде, объявлен deprecated Да и можно вываливать XML клиенту, а он его XLST преобразованием в отчет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 16:09 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
Сергей Арсеньев, Это получится группировка на клиенте. Боюсь у нас клиенты этого не потянут :( И опять же переезд части логики из базы на аппликейшин сервер или на клиента, что тоже распыление логики которого очень хочется избежать, и получить унифицированный подход, то есть, в данном случае, потребовалось изменить что-то - меняем в одном месте (в базе) понадобилось добавить новый отчёт или удалить - то же. Попробую поискать про преобразование хмл и дальнейшую работу как с таблицей. Спасибо за помощь. От примеров бы, всё-таки не отказался ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 16:20 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1возвращать динамические типы вполне возможно... Не човчем. Я уже указывал что можно почитать про эти типы, но - повторюсь - овчинка не стоит выделки. Предельным случаем подобной "универсальности", повторюсь, является EAV (известная так же под ником "модель Тенцера"). Надо ли Вам оно... В конечном итоге запросы оказываются тесно связаны с текущей версией приложения. При доработках править приходится не столько условия отбора, сколько состав и типы данных, возвращаемые запросом. А тут как раз и случается прогнозируемый нежданчик - новые структуры обычно нуждаются в соответствующей логике на стороне клиента (как минимум - в "презентационной"), поэтому затраты на "поправить текст запроса" на круг не так уж велики в сравнении с "поправить формы/кнопки/логику приложения". ...что до "поправить в одной процедуре" - за годы пришел к выводу, что это утопия. Вернее, случаи, когда это актуально, исчисляются долями процента среди общего объема задач по сопровождению кода. И изобретать тут лучше не "единую универсальную процедуру", коей, собственно, и является sql-интерфейс, а процесс генерации "типового" SQL-кода по шаблонам. Поправили шаблон - сгенерировали потребный SQL. Собственно, примерно так и работают крупные аппликухи вроде того же зибеля - разраб определяет "высокоуровневую" структуру данных, рисует формочку/логику, а уж ddl к таблицам и sql генерируется автомагически. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 16:46 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
andrey_anonymous, Про модель Тенцера буду читать. А про набор запросов сгенерированных по условию... Как то даже не задумывался. Спасибо за идею. Хотя как-то она меня смущает. Но буду думать и в этом направлении. Насчёт клиентской части я не особо волнуюсь потому что это именно отчёты, то есть дальнейшая обработка на клиенте - это перечисление столбцов, отображение хтмл страницы и может дополнительная клиентская сортировка\фильтрация, но это сильно опционально. И усложнение в обшем то будет идти со стороны базы и серверной логики - выдача всё большего числа отчётов по разным как предопределённым, возможно даже предыдущими запросами, так и введённым критериям. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 18:00 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
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 - это имена собственные (т.е. не любой тип а конкретный сисовский тип, с гордым названием "Любой" и т.д.) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 18:19 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
orawish, Не знаете почему я не люблю sql и oracle? я до этой темы задал вопрос вот тут может ещё какие мысли появятся ну и народ там тоже грамотный собрался... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 18:55 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
..и Вам там ответили: МОЖНО. Называется Код: plsql 1.
Частные случаи: Код: plsql 1.
Но вместо того чтобы изучить новые пассатижи - кое-кто начал канючить в стиле "...гранаты у него не той системы" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 19:02 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1orawish, Не знаете почему я не люблю sql и oracle? я до этой темы задал вопрос вот тут может ещё какие мысли появятся ну и народ там тоже грамотный собрался... почему не любите - смутно догадываюсь (элементарно, не владеете основами) соседнюю тему посетил. извините, но имхо та тема не более чем мутный поток сознания, которое не знает чего хочет. кому нужен отчет - тот делает отчет. в инструментах соответствующих обычно поддерживаются параметры. при чем тут вью да и база данных, вообще? видно и инструментом, в котором вы отчеты лабаете, тоже не шибко владеете ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 19:10 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
orawish, Ну да, не владею. не люблю инструменты которые подразумевают долгое и муторное написание дублирующегося кода там, где любой другой инструмент обходится несколькими строками. Групинсет - там есть пример нескольких идущих подряд запросов. типа такого: Код: plsql 1. 2. 3. 4. 5. 6. 7.
Представьте что они объединены и между ними прослойки названий подгруппы. Я такое смогу реализовать с помощью групинсетс? Насколько я про него прочитал и попробовал - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 19:19 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
dmitryk1где любой другой инструмент обходится несколькими строками Вам нужен "любой другой инструмент". Если вопрос в цене, то возьмите вместо Oracle MySQL. То, что Вы указали пишется на простом SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2012, 19:25 |
|
возвращаемый тип данных в pipelined function
|
|||
---|---|---|---|
#18+
Roxen, Вся проблема универсальности заключается в необходимости описания УНИВЕРСАЛЬНОГО (для любой таблицы) типа который возвращает pipilined. Проблема решается по дедовски в обход путём созданием спецификации пакета (например), а в нём уже - типа под динамически назначаемую таблицу (выступающую в нашем случае как параметр) Сначала создаем эту спецификацию пакета: Код: plsql 1. 2. 3.
А потом пред вызовом PIPELINED функции переопределяем его: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Сама функция выглядит вот так, например: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 10:55 |
|
|
start [/forum/topic.php?fid=52&msg=37613258&tid=1882253]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 149ms |
0 / 0 |