Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Вниз

Глюк с Хранимой процедурой   Найти похожие ветки 

 
Vitalik S   (2002-12-29 11:02) [0]

Я использую Рекурсивну хранимую процедуру для выбора всех потомков выбранного предка. После некоторого количества вызовов, выскакивает ошибка Too many concurrent executions of the same request. Подскажите пожалуйста, как с этим бороться?


 
Prooksius   (2002-12-29 11:29) [1]

Много рекурсивных вызовов процедуры.
Насколько я помню, в IB 5.х количество рекурсивных вызовов мало (кажется 32), а у IB 6.х - 1000.
Проапгрейдься на FireBird.


 
Prooksius   (2002-12-29 11:43) [2]

А вообще читай http://www.ibase.ru/develop.htm
Там в разделе "Разное" найдешь темы типа "деревянные структуры данных".
Много интересного.


 
kaif   (2002-12-29 15:25) [3]

Скорее всего все же рекурсивная процедура вызывается бесконечное число раз. Нужно тщательнно проверить логику. У меня такое бывает именно при ошибке в логике. Вряд ли в данном случае дело в количестве рекурсивных вызовов (> 32 или >1000), так как таких деревьев практически не бывает.


 
Сергєєв Володимир   (2002-12-29 22:02) [4]

за ИнтерБазу 5 ничего не скажу, а вот у IB6.01 де-то я читал, что рекурсивных вызовов не может быть больше 512.

Это (как там было написано) распространяется и на триггеры. То есть, например, если какая-то ХП делает че-то с таблицей, после чего срабатывает триггер, внутри которого имеется вызов этой же самой ХП, то это тоже считается рекурсивным вызовом.

А насчет рекурсии - посмтри внимательно логику ХП. В базовом учебнике по программированию написано, что ЛЮБУЮ рекурсивную функцию можно представить в виде цикла. Вот и посмотри, имеется ли у тебя возможность "не выхода никогда" из этого цикла.


 
Prooksius   (2002-12-30 08:44) [5]

Дока по IB6:

Description: A stored procedure can itself execute a stored procedure. Each time a stored procedure calls another procedure, the call is said to be nested because it occurs in the context of a previous and still active call to the first procedure. A stored procedure called by another stored procedure is known as a nested procedure.
If a procedure calls itself, it is recursive. Recursive procedures are useful for tasks that involve repetitive steps. Each invocation of a procedure is referred to as an instance, since each procedure call is a separate entity that performs as if called from an application, reserving memory and stack space as required to perform its tasks.
Note Stored procedures can be nested up to 1,000 levels deep. This limitation helps to prevent infinite loops that can occur when a recursive procedure provides no absolute terminating condition. Nested procedure calls may be restricted to fewer than 1,000 levels by memory and stack limitations of the server.


 
Prooksius   (2002-12-30 08:52) [6]

Кстати, ошибочка у меня. Сейчас заглянул в доку по IB 5.6 - тоже самое - 1000 вложеных вызовов. :)

Prooksius © (30.12.02 08:44) касается и IB5


 
Севостьянов Игорь   (2002-12-30 11:29) [7]

Удалено модератором


 
kaif   (2002-12-31 00:04) [8]

Вряд ли у автора вопроса дерево в 1000 уровней.
А кстати, куда он пропал?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
3-72140
Andreika
2002-12-31 18:16
2003.01.23
Потеря данных


7-72572
Wolverin
2002-11-08 22:09
2003.01.23
Метка диска


6-72426
turich
2002-11-22 06:26
2003.01.23
Помогите с локальной сетью


3-72040
Kaginava
2003-01-05 08:48
2003.01.23
IB6.5


1-72356
Shodan
2003-01-12 19:17
2003.01.23
Цикл : пауза, продолжение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский