Страница 1 из 1
Ошибка BLR
Добавлено: 19 апр 2005, 11:59
Birdy
Доброго времени суток!
Возникла проблема:
Создаю хранимую процедуру в базе(Сервер Yaffil, работаю череж IBExpert). В процедуре куча селектов+операций с данными. Итого обьем сохраненной процедуры в текстовом файле равен 38945 байт.
Проблема заключается в следующем:
При попытке откомпилить процедуру ни одной ошибки не вылетает, но при коммит - вылетает ошибка
"Invalid token.
invalid request BLR at offset 26131.
Context allready in use (BLR error).
Changes will be rolled back... "
При этом если я укорачиваю процедуру (делаю размер в тексте меньше 26000) - то все нормально компилится.
Вопрос - что сделать и почему это происходит? Нашел фак - в нем говорится что размер процедур не более 48к, у меня меньше....
Подскажите плз, а то не хочется разбивать на подпроцедуры...
Заранее благодарен!
Добавлено: 19 апр 2005, 12:05
Merlin
Размер BLR тоже ограничен. Точную цифру не помню, но меньше 64К. Так что дроби на вызовы.
Добавлено: 19 апр 2005, 12:09
Birdy
Merlin
Мда, жаль, я уже сам не могу понять где там что
Буду дробить.
Спасибо.
Re: Ошибка BLR
Добавлено: 19 апр 2005, 12:10
DSKalugin
Birdy писал(а):Итого обьем сохраненной процедуры в текстовом файле равен 38945 байт.
Ну прямо экзотика какая-то. Зачем такие большие ХП делать???
Программу писать надо не на SQL, а на языках программирования.
практика показывает, что отдельные маленькие запросы в общем работают быстрей ежели загрузить сервер одной огромной ХП.
Birdy писал(а):
При этом если я укорачиваю процедуру (делаю размер в тексте меньше 26000) - то все нормально компилится.
!
не удивительно, т.к. ошибка дальше на стр 26131, а ты ее просто отсекаешь
Добавлено: 19 апр 2005, 12:17
Birdy
DSKalugin
Куча мелких запросов (в процедуре арифметических операций строчек 10) это порядка 150-200 для каждой записи в таблице - потом сложить/вычесть/поделить, а потом в отчет запихнуть, я считаю что на слабой клиентской машине со слабой сеткой (10 мб) это сделается медленнее, чем ХП на нормальной машине выступающей сервером.
Хотя, будет время - сделаю и так и так - проверю что лучше..
А насчет строки - там нету ошибки в самой процедуре, это связано с размером процедуры, так как разбил на две чести - обе выполняются нормально.
Re: Ошибка BLR
Добавлено: 19 апр 2005, 12:22
sag
DSKalugin писал(а):Программу писать надо не на SQL, а на языках программирования.
практика показывает, что отдельные маленькие запросы в общем работают быстрей ежели загрузить сервер одной огромной ХП.
Хм. Практика. Все делать на клиенте (в том числе "жирные обработки" данных) и таскать тонны данных по сети?
Не надо обобщать. Всему свое применение.
Добавлено: 19 апр 2005, 12:41
Merlin
Birdy писал(а):Merlin
Мда, жаль, я уже сам не могу понять где там что
Вот поэтому добрые люди и придумали процедуры

Чтоб функции с однозначным назначением были обозримы и понятны, а не только для того, чтоб использовать один и тот же код в разных местах.
Re: Ошибка BLR
Добавлено: 19 апр 2005, 14:22
hvlad
Birdy писал(а):"Invalid token.
invalid request BLR at offset 26131.
Context allready in use (BLR error).
Changes will be rolled back... "
Кол-во контекстов ограничено - 255 штук.
Контекст - ссылка на таблицу, аггрегат, объединение.
IMHO это пора в FAQ
Birdy писал(а):Нашел фак - в нем говорится что размер процедур не более 48к, у меня меньше
Выкинуть этот FAQ.
Текст процедуры ограничен 64K, BLR - тоже 64К
Добавлено: 19 апр 2005, 19:20
Birdy
hvlad
Спасибо, понял в чем ошибка.
Лечится только одним - разбитием на несколько процедур.
Спасибо всем кто откликнулся!