"йЗПТШ зПТВПОПУ" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]


"Vlad Khorsun" <[EMAIL PROTECTED]> сообщил/сообщила в новостях следующее: news:[EMAIL PROTECTED]

"йЗПТШ зПТВПОПУ" ...

Вопрос не мой, 
http://forum.vingrad.ru/forum/s/47013e7cda364d210e5f6c9487fed36c/topic-188462.html

у автора Сервер FireBird2.0.

Суть проблемы: при вызове рекурсивной процедуры ADD_EXTRA при большом уровне 
вложенности сервер
возвращает ошибку

   Есс-но, что тут неожиданного ?

Нашел на скл.ру http://www.sql.ru/forum/actualthread.aspx?bid=2&tid=81334
писали что должны были исправить ещё в 1.5

   А при чём тут одно к другому ?

У меня WI-T2.1.0.16780 Firebird 2.1 Beta 2
в атаче пример, по сообщению с форума, может не совсем корректно сделал, но 
ошибка и у меня

   И где вызов процедуры и данные в таблицах ?

Вызова процедуры нет, просто в експерте вызываю отладчик задаю basebrice_id =1 и partner_id = 1, остальные параметры можно задать произвольными числами, данные сделал датагенератором из експерта в
Extra
ID     автоинкремент от 1 до 100
   PARTNER_ID    автоинкремент от 0 до 99
   BASEPRICE_ID автоинкремент от 99 до 0
остальные поля случайными числами

BASEPRICE
   ID     автоинкремент от 1 до 100
   PARID автоинкремент от 1 до 100
вот и все данные

   Офигительный тест кейс... нельзя было эти данные в скрипт сразу извлечь ?
...ладно, сгенерил

Если нужно могу попробовать подергать автора на этот счет???

   Подёргай его на счёт :
а) задания вопросов в нормальных форумах
б) наличия условия выхода из рекурсии
в) пропущенного NOT в IF (EXISTS ...) в процедуре ADD_EXTRA (ТЛ сильно не 
напрягал)

   Откуда ты решил, что вылетает на первой же итераци ? Ты сообщение об ошибке 
видел ?
Со стеком вызовов, который туда целиком просто не влез...


   Кстати, для ценителей - добавляем в ADD_EXTRA вместо не нужного там 
SUSPEND'а :

 WHEN ANY DO
 BEGIN
   SELECT FIRST 1 1 FROM MON$ATTACHMENTS INTO CURID;
   EXCEPTION;
 END

Вызываем

EXECUTE PROCEDURE ADD_EXTRA (1, 0, 0, 1, 0, 0)
тут будет ошибка

а тут -
SELECT * FROM MON$CALL_STACK
можно посмотреть сколько вызовов реально выполнилось


   Всё это, есс-но, на 2.1 :-P
--
Хорсун Влад


Ответить