
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
10.10.2002, 18:39:36
|
|||
|---|---|---|---|
|
|||
Как из функции дать сигнал наружу? |
|||
|
#18+
MSSQL. У меня есть хранимая процедура, ктр запускает функцию, которая может запускать себя, т.е. рекурсивная функция. Вся эта конструкция иногда долго работает. Хотелось бы как-то проанализировать ее в Query Analyser или путем записи марков времени во временную таблицу. Но !!! 1) Print в ф. не работает! 2) Insert в ф. не работает! 3) хр. процедуру из ф. не вызвать! 4) Prifiler вызовы моей функции не показывает! Посоветуйте, знатоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
10.10.2002, 18:48:37
|
|||
|---|---|---|---|
Как из функции дать сигнал наружу? |
|||
|
#18+
Мой совет: Не надо делать рекурсивные функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2002, 10:22:39
|
|||
|---|---|---|---|
|
|||
Как из функции дать сигнал наружу? |
|||
|
#18+
Функция сканирует ветви деревьев и подсчитывает некую сумму по условию. Без рекурсии здесь не обойтись. Впрочем, причем здесь рекурсия? См. сабж. Подскажите, кто знает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2002, 10:33:36
|
|||
|---|---|---|---|
Как из функции дать сигнал наружу? |
|||
|
#18+
/topic/10197 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2002, 11:40:07
|
|||
|---|---|---|---|
|
|||
Как из функции дать сигнал наружу? |
|||
|
#18+
Спасибо за ссылку, там все прекрасно. Но у меня другая задача - здесь без рекурсивной функции не обойтись. CREATE FUNCTION dbo.fTimeParentAlloc_sub (@ParentId as int) RETURNS int AS BEGIN --if @@NESTLEVEL > 20 return 0 declare @Sum as int set @Sum = 0 select @Sum = sum(case when ms.MSType < 2 then ms.TimePlan else dbo.fTimeParentAlloc_sub(ms.ID) end) FROM ms WHERE ms.MSParent = @ParentId return ISNULL(@Sum, 0) END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2002, 13:04:16
|
|||
|---|---|---|---|
Как из функции дать сигнал наружу? |
|||
|
#18+
Вместо рекурсии можно делать псевдорекурсию на циклах. Собственно, настоящая рекурсия - это обыкновенный цикл с сохранением контента в стеке. Организуй себе что-то вроде стека и крути циклы. Работать будет гораздо шустрее, чем настоящая рекурсия. Хотя бы потому, что ты свой "стек" можешь организовать наиболее оптимальным образом - чтобы сохранялось в нем только то, что нужно, а не все подряд. Функции имеют ограничения. И с этим приходится мириться. А кто тебя заставляет дедать все именно в виде функции? Почему не в виде SP? Кстати, они себя умеют рекурсивно вызывать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2002, 14:36:15
|
|||
|---|---|---|---|
Как из функции дать сигнал наружу? |
|||
|
#18+
Но у меня другая задача - здесь без рекурсивной функции не обойтись. Интересно как же это я обошелся? Код: 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. А если еще учесть что структура дерева может быть другой... Так что мой предыдущий совет остаётся в силе :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2002, 17:37:10
|
|||
|---|---|---|---|
|
|||
Как из функции дать сигнал наружу? |
|||
|
#18+
to SergSuper Спасибо, это работает. Ну раз мы тут собрались, тогда еще пара вопросов: 1) А что, Вы вообще против рекурсий в SQL? 2) Что Вы имеете ввиду, намекая на другую структуру дерева? У меня она двойная, т.е. классическая ( с указанием одной ссылки на Parent ) и с памятью всех родителей (10 уровней). Это как то влияет на приложение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.10.2002, 19:46:44
|
|||
|---|---|---|---|
Как из функции дать сигнал наружу? |
|||
|
#18+
Viktor Rybak 4) Prifiler вызовы моей функции не показывает! ??? У меня Prifiler показывает всё. Раскажи подробней про версии MSSql, Windows, Servis Packs ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.10.2002, 09:51:45
|
|||
|---|---|---|---|
Как из функции дать сигнал наружу? |
|||
|
#18+
2 Viktor Rybak 1) Вообще вроде как в теории рекурсией лучше не пользоваться. С ней писать проще, но обычно алгоритмы с рекурсией менее эффективные. Т.е. рекурсию применяют обычно там где алгоритм без ней получается слишком сложным. Например когда есть косвенная рекурсия - процедура А, вызывает процедуру В, которая опять вызывает А. Это всё что касалось процедурных языков. В SQL где можно очень просто хранить данные в таблицах, я вообще не вижу смысла ей пользоваться. К тому же и глубина её небольшая. 2) Например есть тиакие идеи: http://sdm.viptop.ru/articles/sqltrees.html http://www.osp.ru/win2000/sql/967.htm Не факт что это Вам подойдёт, но знать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.10.2002, 13:18:40
|
|||
|---|---|---|---|
|
|||
Как из функции дать сигнал наружу? |
|||
|
#18+
To SergSuper: Спасибо за помощь! To sparrow: - Windows 2000 Prof (sp3) - SQL Server 2000 Процедура с возвращаемым параметром вызывает рек-функцию. Profiler вызовы фукции не показывал, было лишь множество строк с процедурой с параметром NULL, затем с правильным ответом из функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&mobile=1&tid=1819632]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
95ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 385ms |

| 0 / 0 |
