|
|
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
Вот такая штука: NO_DATA_NEEDED . Вроде и документированная , но на форуме я её только в одном топике встретил - да и там это был grep по $ORACLE_HOME/rdbms/admin/* в поиске предопределённых сообщений. Кто-то использует? Вкратце, копипаст блога Кайта Код: plaintext 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. ------------------------------------------------------- When I say "RTFM" or "STFF" or "STFW", the third letter means "Following" or "Fine"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2010, 13:34:12 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
suPPLer, Я думаю, прежде всего надо отталкиваться от целевого назначения pipelined. Это функции возвращающие наборы данных, при этом, их можно использовать как на клиенте так и в запросах. Далее, потому как вернуть на клиент набор данных есть еще масса вариантов, то по-моему pipelined придуманы для того, чтоб можно было сделать прежде всего select результата. Кроме того подразумевается, что функция целиком реализует некоторую логику, согласно которой и возвращает набор данных. То есть является неким целым. В связи с чем, довольно проблематично представить ситуацию, при которой возникает необходимость оборвать работу функции. Более того, поскольку коллекции работают быстрее, я вообще в продакшене pipelined не использую: source code Код: plaintext 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. Но для pipelined имеется два преимущества: 1) не надо создавать тип результата (весьма сомнительно поскольку обычно возвращается просто коллекция чисел) 2) можно обрывать выполнение по NO_DATA_NEEDED (весьма сомнительно в принципе :)) Откуда у меня возникает более общий вопрос: кто-либо вообще искользует pipelined в продакшене? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2010, 21:02:52 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop Думаю выигрыш почти в 18% является серьезным подспорьем для использования колеекций против pipelined. ... Откуда у меня возникает более общий вопрос: кто-либо вообще искользует pipelined в продакшене? 18% - это не на порядок. а тестик Ваш миллионах на 30 записей погоняйте, причем желательно возвращать более-менее пристойного размера строки. используем и будем использовать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2010, 21:11:16 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, ЕМНИП когда pipelined появились, появились они в основном для ETL. А там источники-файлы и все вытекающие (0 записей, учечка ресурсов и т.д.) обычное дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2010, 21:31:51 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopЯ думаю, прежде всего надо отталкиваться от целевого назначения pipelined. Ну что ж, давайте. :) PIPELINED-функции, появившиеся в 9i, расширяли возможность обращаться к функциям как к таблицам в запросе. Вы уже упомянули про табличные функции, возвращающие коллекции. Эти функции хороши там, где результат нужен целиком и сразу, потому что они сохраняют результат в коллекцию перед тем, как отдать хотя бы одну строку из возвращаемой таблицы. Но чтобы получить эту первую строку, нужно дождаться, пока будет обработана вся таблица. Кроме того, параллелизм к запросу данных из такой функции не приделаешь. Конвейерные функции позволяют: - получить строку, когда она будет готова. В условиях больших объёмов обрабатываемых данных, занимающих время алгоритмов обработки строк и нескольких этапов обработки это довольно важно. - распараллелить обработку строк функцией. Например, при вставке результатов вида INSERT SELECT FROM PIPELINED FUNCTION или их последующей обработке другой функцией. Как такое легко получить при помощи табличных функций, возвращающих коллекции, я пока не задумывался. :) Почему-то кажется, что это не легко, если возможно. - кроме того, экономия используемой памяти. Вся коллекция не нужна, хватит только той части, которая будет возвращаться из функции. Строки возвращаются пачками для увеличения эффективности, что немного разбавляет первое заявленное преимущество. :) - модульный подход - все необходимые типы (строго типизированные ссылочные курсоры, типы используемых записей и возвращаемых pl/sql-коллекций) и использующие их конвейерные функции можно собрать в одном пакете. - ну, и заявленное в сабже исключение позволяет корректно освободить ресурсы и завершить процесс обработки в определённых ситуациях. Одна из основных областей использования конвейерных функций - этап TRANSFORM в ETL-процессах. Например, функция, обрабатывающая таблицу-результат функции, обрабатывающей таблицу-результат функции, ..., обрабатывающей ссылочный курсор с запросом, из внешней таблицы. Поверьте, этот подход используется и хорошо себя зарекомендовал. PS: Кстати, в продакшене, тесте и разработке довольно часто используются конвейерные функции. Подсказать где? :) PPS: Что-то по сабжу все отмолчались... Мне вот пока использовать не довелось, хотя наличие способа, конечно, душу греет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2010, 02:10:58 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
suPPLerМне вот пока использовать не довелось, хотя наличие способа, конечно, душу греет.Да вот поэтому и отмолчались Фишка есть, это радует, но в обычных ситуациях и нахрен не нужна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2010, 02:14:17 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
suPPLerPPS: Что-то по сабжу все отмолчались... Мне вот пока использовать не довелось, хотя наличие способа, конечно, душу греет.Думаю, что практически все, как Кайт или Jeff Kemp - с этим не сталкивались.. При прочтении думаешь - классно, надо поиспользовать, а потом задумываешься и понимаешь, что как-то необходимости до сих пор не возникало и возникнет ли.. Но интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2010, 09:43:40 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
JaRo, +1. присодиняюсь к Jeff Kemp. он в принципе дает понять, что совсем не очевидно, что это исключение вообще когда нибудь будет возбуждено. у меня такое ощущение, будто это исключение придумано на какое то далекое будущее и попало в релиз "сквозь пальцы" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2010, 11:20:11 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
Зачем может понадобиться пост-обработка? может быть масса причин, связанных с корректным освобождением временных и внешних ресурсов. Если вы ее делаете после END LOOP, нужно не забывать и про прерывания запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2010, 11:46:42 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousа тестик Ваш миллионах на 30 записей погоняйте, причем желательно возвращать более-менее пристойного размера строки. используем и будем использовать :) Почитал про преимущества , понял к чему вы клоните. А что вы использовали до появления pipelined? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2010, 20:02:34 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopА что вы использовали до появления pipelined? Если речь идет о тех ситуациях когда "голый" sql не очень удобен - то циклы pl/sql (bulk collect into... LIMIT x). А до bulk collect - обычный курсорный цикл либо dbms_sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2010, 22:44:50 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы, я приблизительно так и оценивал распространённость использования этой фичи. PS: suPPLerКстати, в продакшене, тесте и разработке довольно часто используются конвейерные функции. Подсказать где? :) Я думаю, это Вам известно, но тем не менее - dbms_xplan.display%. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2010, 12:54:02 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
suPPLerЯ думаю, это Вам известно, но тем не менееА я скоро забуду, наверное :) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2010, 12:57:20 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
suPPLersuPPLerКстати, в продакшене , тесте и разработке довольно часто используются конвейерные функции. Подсказать где? :) Я думаю, это Вам известно, но тем не менее - dbms_xplan.display%. :)Вопрос у меня стоял именно про то, что выделено. И если Вы "довольно часто" используете в продакшене этот функционал, думаю что-то не ладно в Вашем королевстве. Ну и есс-но инетересовали самописные pipelined функции. :) з.ы. Впрочем после ответов Андрея и обсуждения на АскТом инетерес у меня уже не такой острый, т.к. понял, что функционал действительно имеет право на жизнь. Просто я лет пять назад сделал выбор в пользу коллекций (уже точно не помню всех "за" и "против") и решил снова сопоставить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2010, 13:10:29 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopИ если Вы "довольно часто" используете в продакшене этот функционал, думаю что-то не ладно в Вашем королевстве. Toucher, mon ami! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2010, 13:30:17 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
даже Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. что логично ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2010, 14:01:03 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
а по части suPPLer.. Кто-то использует? так это штука критическая для тех, кто прётся от пайплайнов на версиях (9i.?), которые жить не могут без return-a в конце ея. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2010, 15:43:44 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
Вопрос скорее зачем отличать OTHERS от NO_DATA_NEEDED. Например, чтобы не делать retry on error, когда ошибка заведомо не ошибка. Или, в случае фатальной ошибки, сохранить используемый процессом временный файл для последующего разбора проблемы, а в случае stop key/user canceled request не сохранять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2010, 16:29:11 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
-2-Вопрос скорее зачем отличать OTHERS от NO_DATA_NEEDED. Например, чтобы не делать retry on error, когда ошибка заведомо не ошибка. Или, в случае фатальной ошибки, сохранить используемый процессом временный файл для последующего разбора проблемы, а в случае stop key/user canceled request не сохранять. т.е. получается что NO_DATA_NEEDED не возбуждается из самого оракла, а создано для удобной обработки каких то ситуации, которые определяет сам разработчик.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2010, 16:40:50 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
compheadполучается что NO_DATA_NEEDED не возбуждается из самого оракла, а создано для удобной обработки каких то ситуации, которые определяет сам разработчик.? Возбуждается из самого Оракла. И в то же время создано для удобной обработки ситуаций ... Если вспомнить другой способ реализации табличных функций, через интерфейс ODCITable, то NO_DATA_NEEDED это "аналог" ODCITableClose. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2010, 10:40:51 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
хм... перешли с 11.2.0.3 на 11.2.0.4, получили субжом в морду Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 09:22:08 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
andreymx, T. KyteIt is deprecated syntax from version 8.0 Может, пришло всё же время на TABLE переходить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:22:17 |
|
||
|
NO_DATA_NEEDED aka ORA-06548
|
|||
|---|---|---|---|
|
#18+
suPPLerandreymx, T. KyteIt is deprecated syntax from version 8.0 Может, пришло всё же время на TABLE переходить?как запросы правим в порядке сопровожения, так корректируем ЗЫ: добавил в функцию обработку Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2016, 11:43:37 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=36588815&tid=1887908]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
237ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 583ms |

| 0 / 0 |
