Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Добрый день. Прорабатывается вопрос переезда с Oracle (10g) на DB2 (9.7) в режиме совместимости. Натолкнулся на проблему переноса PIPELINED-функций. Есть код (и много) такого вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 1. "TYPE my_type_table IS TABLE OF my_type" дает ошибку, хочет что бы обязательно был "INDEX BY". 2. Собственно PIPELINED-функция - ничего похожего в документации по DB2 не нашел. Буду рад любой подсказке и наводке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2010, 16:29 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Два возможных решения: - табличная функция (table function, http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.routines.doc/doc/c0023363.html) - функция UNNEST() для массива типа my_type_tableж ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2010, 18:42 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
mustaccio Большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2010, 13:03 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Этим не заменишь, потому что unnest работает только с переменной типа массив, т.е. перед вызовом unnest массив должен быть уже сформирован, поэтому если набор строк получается приличный - это будет кушать память, а если очень приличный - вобще не работать. Я не нашёл ещё аналога оракловому PIPELINED в db2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 12:54 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Табличные функции так же не решают проблему, потому что они требуют селект на выходу, а селект то делать неизчего, потому что строки набора формируются рунтайм и с помощью PIPELINED отправляются в результирующий набор. В DB2 вариант пока, - использовать сессионные или глобальные временные таблицы. Наикривейшее решение.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 13:01 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
EFyodor, Все java / C табличные функции в db2 - pipelined по-оракловому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 13:09 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Стоит задача портации c Oracle на DB2. Версия DB2 - 9.7. В этой версии IBM заявили о поддержке PLSQL. На практике я уже убедился какая это поддержка. Но задачи это не меняет, нужно портиторовать именно на PLSQL с мнимальным изменением кода. Т.е. переписывать на java или C нет возможности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 16:20 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
EFyodor... Т.е. переписывать на java или C нет возможности.Тогда используйте наикривейшее решение. Кстати, а почему вы так считаете? Либо покажите для примера, где такие функции у вас используются. Может быть, удастся обойтись без них... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 16:47 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Требование: общий репозитарий. Т.е. исходный код должен копмилироваться на DB2, Oracle. Потому что не должен кардинально меняться регламент разработки(коммит изменений, выпуск патчей и т.п.). PIPELINED-функции используюсяв как источники для отчётов, потому что iReport в ранних версиях не мог получать набор из реф курсоров, т.е. понимал только селекты из таблиц, поэтому чтобы не плодить временные таблицы на каждый отчёт, использовались PIPELINED-функции, что позволило использовать их напрямую в селектах в iReport. В DB2 единственный вариант не переписывать все отчёты - это использовать табличные функции. Но, SQLPL и PLSQL в DB2 не поддерживают PIPELINED. В итоге я пока вижу переписывание PLSQL в части замены PIPELINED на временные таблицы, чтобы эти таблицы использовать в табличных функциях SQLPL. Это уже приводит к несовместимости кода, потмоу что в DB2 нет других возможностей использовать ввункцию в селекте, кроме как табличной функции, но табличные функции можно создать только на SQLPL, потому что оператор TABLE() в выражении селекта ругается при использовании PLSQL функции, которая возвращает коллекцию, хотя именно такие функции используются в селектах в Oracle c оператором TABLE(). Вот такая вот поддержа Oracle в DB2... Поэтому ищу, но пока тупик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 17:20 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Я конечно не спец ни в оракле ни в дб2, но идея иметь репозиторий кода на два совершенно разных сервера кажется несколько смелой, если не сказать утопичной. Хотя конечно могу и ошибаться. В люом случае - удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 19:20 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
EFyodorPIPELINED-функции используюсяв как источники для отчётов, потому что iReport в ранних версиях не мог получать набор из реф курсоров, т.е. понимал только селекты из таблиц, поэтому чтобы не плодить временные таблицы на каждый отчёт, использовались PIPELINED-функции, что позволило использовать их напрямую в селектах в iReport. А view уже отменили? У ораклиного гуру Кайта вы можете видеть примерно такой список приоритетов: * писать на SQL * если невозможно - писать на PL/SQL * если невозможно - писать на Java * иначе - делать на C Любопытно было бы посмотреть на код. Что там "а селект то делать неизчего, потому что строки набора формируются рунтайм". IBM для оправдания существования своих C и Java pipelined-функций ссылается на существование не-SQL-источников. Т.е., к внешнему файлу обратиться или http-запрос сделать. У вас ведь не тот случай? Я-то подозреваю, что у вас тот случай, когда люди пользуются возможностью, потому что она есть, тогда как от неё следовало бы воздержаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 22:09 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Victor Metelitsa, view тут никак не помогут. Я же говорю, что данные нужны для отчётов. Почему вы думаете, что отчёты настолько простые, что можно обойтись view? Если бы iReport(Jasper Report) поддерживал получение набора из функции или выходного параметра процедуры, этой проблемы вообще не было бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2011, 22:39 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Пожалуйста, покажите примеры (по мотивам ваших существующих функций). То, что, по-вашему, нельзя решить со VIEW. Ну, рекурсия может потребовать не VIEW, а табличной функции на SQL PL - но это можно рассматривать как VIEW с передаваемыми внутрь теле VIEW параметрами. Я знаю, что многосекционные запросы с WITH, аналитические функции ("Analytic Functions" по ораклячьи, "OLAP functions" по дибитовски) и рекурсия - творят настоящие чудеса. Мне интересно было бы узнать, почему они не помогут вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2011, 00:42 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
Доработал расширение для iReport. Теперь он умеет работать с выходными параметрами дибитушных процедур или функций типа REF CURSOR или CURSOR. Вопрос pipelined снимается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2011, 15:26 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
mustaccioДва возможных решения: - табличная функция (table function, http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.routines.doc/doc/c0023363.html) - функция UNNEST() для массива типа my_type_tableж Где можно подробнее посмотреть работу UNNEST с массивами сложных типов? Например, массив элементов типа ROW: create or replace type T_ROW as ROW ( r_name varchar(10), r_id integer ); create or replace type T_ARR as T_ROW array[]; или для асс.массивов: TYPE T_REC IS RECORD ( r_name varchar(10), r_id integer ); TYPE T_ARR IS TABLE OF T_REC index by integer; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 12:58 |
|
||
|
Из ORACLE в DB2: чем заменить PIPELINED-функцию
|
|||
|---|---|---|---|
|
#18+
db2unnest, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2012, 14:47 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=47&tid=1601946]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 147ms |

| 0 / 0 |
