|
|
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток! Сильно не травите, мне приходится подстраиваться под уже существующую логику говнокода. Есть курсор : details is select <<много всего>> from <<много всего>> ; объявлен он в pipeline функции. мне нужно дважды его открыть, т.е. запилить цикл в цикле. Я делаю так: for i in details loop for j in details loop ....много говнокода.... end loop; ....много говнокода.... pipe row(....); end loop; Компилится все без ошибок, но что то идет не так, я получаю в результате пустое множество. Ткните носом, пожалуйста, в ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 08:42 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
israelshamir, если объявляю еще один курсор с тем же телом и уже его открываю внутри первого, то все работает, но не хотелось бы дублировать и без того говнокод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 08:48 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
israelshamir, Код: plsql 1. А где присвоение значений переменной <v_result_row> ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 08:52 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Xdredd.vl, pipe row ( udf_name ( i.v1, i.v2, ... i.vn, значение_посчитанное_во_внутреннем_курсоре ) ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 08:58 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
israelshamir, а вот это "значение_посчитанное_во_внутреннем_курсоре" аналитическими функциями в запросе никак не посчитать ? А вот это "дважды открыть один курсор" вызывает легкий и не поддельный ужас ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:05 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Xdredd.vl, к сожалению, нет, иначе придется полностью переписать этот продукт творческого поноса. а курсор в принципе вызывает ужас ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:09 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Xdredd.vl, если на то пошло, как открыть его один раз и дважды пробежаться по нему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:11 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
israelshamirесли на то пошло, как открыть его один раз и дважды пробежаться по нему?Нельзя в одну реку войти дважды. Необходимость даже не была притянута за уши. Выглядит сага об XYZ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:16 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
israelshamir, Зачем бегать по курсору внутри него самого ? (если в аргумент курсора не передается значение из него самого) 1) пробегаем один раз, аггрегируем что надо, запоминаем в переменную. 2) пробегаем второй раз уже с пайпом результата + переменная(п.1). (если в аргумент курсора все-таки передается значение из него самого): 3.1) находим этого "гения" 3.2) долго пинаем ногами в живот 3.3) однозначно переписываем этот кусок кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:19 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Xdredd.vl3.1) находим этого "гения"Вам обоим перед критикой не менее двух раз смотреть в зеркало. Опрометчиво считать говнокодом нечто только со слов такого же говнокодера. Ему всё, что не похоже на его собственное дерьмо, может таким казаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:23 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Xdredd.vl, ладно, придется переписать шедевр. Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:25 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
ElicXdredd.vl3.1) находим этого "гения"Вам обоим перед критикой не менее двух раз смотреть в зеркало. Опрометчиво считать говнокодом нечто только со слов такого же говнокодера. Ему всё, что не похоже на его собственное дерьмо, может таким казаться. Двойное прочтение одного набора данных, говно-код по умолчанию, без вариантов. А если второе чтение еще и во вложенном цикле из первого, то это "грандговнокод", ибо для каждого прочтения записи из набора будет перечитываться весь набор еще раз ... Все что не решается в этом случае аналитикой и/или древовидным запросом, решается рекурсией (например обход какого-нибудь уж "хитровыделанного" дерева) или моделью ... а то что приведено в коде это извращение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:30 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
israelshamirXdredd.vl, если на то пошло, как открыть его один раз и дважды пробежаться по нему? есть фича и пробежаться два раза, но на клиенте не вижу ничего страшного открыть курсор два раза зы почему многие считают чужое сразу говнокодом Вы что пишите идеально, поверте придратся можно всегда ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:42 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Xdredd.vlДвойное прочтение одного набора данных, говно-код по умолчанию, без вариантов. А если второе чтение еще и во вложенном цикле из первого, то это "грандговнокод", ибо для каждого прочтения записи из набора будет перечитываться весь набор еще раз ...Всё это неймётся сделать ТСу, и, следовательно, нет в исходном коде. У тебя слишком буйная фантазия, все "гении" - в зеркале. Xdredd.vlВсе что не решается в этом случае аналитикой и/или древовидным запросом, решается рекурсией (например обход какого-нибудь уж "хитровыделанного" дерева) или моделью ... а то что приведено в коде это извращение.У тебя гипертрофированная фантазия о задаче. Как следствие много бесполезного шума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:43 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Elic, 1) правильно говорить "у Вас" и именно с большой буквы, так как именно это приемлемая форма обращения к незнакомому человеку.(если Вас этому не учили, то обратитесь к родителям за разъяснениями). 2) То что вы называете "гипертрофированное мнение" лишь принятие того что задача должна быть решена в общем виде так как не озвучено ограничений 3) Пока что в этой ветке бесполезный шум производите именно Вы (судя по количеству сообщений это Ваше любимое занятие). На этом считаю наш с Вами диалог оконченным. commit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 09:59 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
stax..israelshamirXdredd.vl, если на то пошло, как открыть его один раз и дважды пробежаться по нему? есть фича и пробежаться два раза, но на клиенте не вижу ничего страшного открыть курсор два раза зы почему многие считают чужое сразу говнокодом Вы что пишите идеально, поверте придратся можно всегда ..... stax А разве клиент не будет при этом каждый раз отправлять запрос на сервер и "тащить" данные ответа по сети? Всегда думал что лучше подготовить все и сразу на сервере и выдать за один раз клиенту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 10:01 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
israelshamir, Курсор параметризирован? Какую задачу решает такая конструкция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 10:05 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Xdredd.vl1) правильно говорить "у Вас" и именно с большой буквы, так как именно это приемлемая форма обращения к незнакомому человеку.Это твоё право, иметь своё мнение. Главное, не будь навязчивым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 10:08 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Elic, ок, так же как и твое право быть не воспитанным уродом, который правила хорошего тона считает просто чьим-то мнением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 10:17 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
israelshamir, Если задача позволяет такие изменения, я бы код сдобрил коллекциями, как в примере ниже, или GTT, если память в дефиците. Код: 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. 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 10:30 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
stax..israelshamirXdredd.vl, если на то пошло, как открыть его один раз и дважды пробежаться по нему? есть фича и пробежаться два раза, но на клиенте не вижу ничего страшного открыть курсор два раза зы почему многие считают чужое сразу говнокодом Вы что пишите идеально, поверте придратся можно всегда ..... stax Предполагается , что между 2 проходами, в даные попадающих под предикат никто другой ничего свежего не закомитит. собственно есть 2 варианта - сериализейбл либо dbms_lock, с соотвествующими последствиями. А хочется и рыбку и ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 15:35 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
Xdredd.vlstax..пропущено... есть фича и пробежаться два раза, но на клиенте не вижу ничего страшного открыть курсор два раза зы почему многие считают чужое сразу говнокодом Вы что пишите идеально, поверте придратся можно всегда ..... stax А разве клиент не будет при этом каждый раз отправлять запрос на сервер и "тащить" данные ответа по сети? Всегда думал что лучше подготовить все и сразу на сервере и выдать за один раз клиенту. я не использовал, врать не буду, но знающие говорят что на клиента тянется раз я о Scrollable Cursors - Oracle ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 15:41 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
д0kХstax..пропущено... есть фича и пробежаться два раза, но на клиенте не вижу ничего страшного открыть курсор два раза зы почему многие считают чужое сразу говнокодом Вы что пишите идеально, поверте придратся можно всегда ..... stax Предполагается , что между 2 проходами, в даные попадающих под предикат никто другой ничего свежего не закомитит. собственно есть 2 варианта - сериализейбл либо dbms_lock, с соотвествующими последствиями. А хочется и рыбку и ... read only ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 15:48 |
|
||
|
как открыть один курсор дважды?
|
|||
|---|---|---|---|
|
#18+
д0kХПредполагается , что между 2 проходами, в даные попадающих под предикат никто другой ничего свежего не закомитит. собственно есть 2 варианта - сериализейбл либо dbms_lock, с соотвествующими последствиями. А хочется и рыбку и ... Мой друг, опять ты все мешаешь в кучу. Если действительно надо, чтобы никто ничего не закоммитил, то только lock table/dbms_lock. Если же всего лишь требуется двумя запросами прочитать одно и тоже, то lock не нужен. И даже serializable использовать необязательно - есть еще ретроспективные запросы, при условии, что в другой сессии не будут выполнены truncate или drop. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2016, 15:54 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39366385&tid=1886813]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
191ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 532ms |

| 0 / 0 |
