powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Размер ХП
18 сообщений из 18, страница 1 из 1
Размер ХП
    #32634252
Andrey Dmitrienko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.

Подскажите пожалуйста, есть ли ограничение на размер исходного текста хранимой процедуры в FireBird 1.5. Если судить по типу поля, где он хранится, то вроде не должно быть: RDB$PROCEDURE_SOURCE - BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET UNICODE_FSS.
...
Рейтинг: 0 / 0
Размер ХП
    #32634258
Фотография VF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ограничений по размеру кода помоему нет, есть ограничение в 32к на размер возвращаемых данных...
...
Рейтинг: 0 / 0
Размер ХП
    #32634337
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я столкнулся, есть ограничение на размер откомпилированной ХП. ФБ1. разбивал на несколько - и работало
...
Рейтинг: 0 / 0
Размер ХП
    #32634348
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам не нарывался, но в форуме epsylon.public.interbase такие случаи описывались. Боюсь соврать, но помоему blr процедуры не должен превышать 64к. Сюда разработчики переодически заглядывают. Если я наврал - поправят. Вообщем то это не проблема. Процедуру всегда на две разбить можно.
Удачи.
...
Рейтинг: 0 / 0
Размер ХП
    #32634493
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то типа размер исходника + размер BLR не больше 64К. Придет Влад, скажет точно ;-)
...
Рейтинг: 0 / 0
Размер ХП
    #32634670
Andrey Dmitrienko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2dimitr

А где это можно вычитать, если не секрет
...
Рейтинг: 0 / 0
Размер ХП
    #32634755
Andrey Dmitrienko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Лентяй

Процедуру разбить конечно можно, интересно же другое: какие у FB существуют ограничения. Если ограниченине на размер BLR, то в него не должны попадать закоментированные каски кода. Если ограничение на размер исходного кода (до 64кб) то моя процедура в это ограничение никак не попадает: до модификации 61119 байт (компилится нормально), после модификации - 63002 байта (не компилиться).

Для проверки я закоментировал добавленный кусок - компилиться не хочет, однако FB ругаестся уже другими словами ():

1) Procedure COMPL$EXTSTATREPTOPRINT00000¤ not found.
2) Name longer than database column size.
3) unsupported DYN verb.
4) Parameter BYDEPCAl+GORIES in procedure COMPL$EXTSTATREPTOPRINT000001 not found.
5) Parameter BYDEPCATEGORI$_ in procedure COMPL$EXTSTATREPTOPRINT000001 not found.

и я думаю, что этот перечень не есть конечный. При этом ХП COMPL$EXTSTATREPTOPRINT00000 ¤ и параметры BYDEPCA l+ GORIES, BYDEPCATEGORI $_ в процедуре не существует.
...
Рейтинг: 0 / 0
Размер ХП
    #32634907
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вон тебе один из разработчиков (dimitr) уже ответил. И судя по описанным тобой симптомам его ответ более точный, чем мой. А я не люблю длинные процедуры писать. Потом разбираться в них уж очень лениво :)
...
Рейтинг: 0 / 0
Размер ХП
    #32635355
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ограничение на длину BLR - 64K.

Однако при CREATE PROCEDURE генерится не один кусочек BLR, а несколько - для каждого параметра, с исходным текстом, и собственно BLR процедуры. При ALTER PROCEDURE в начало добавляется ещё и BLR для удаления пар-ров, поэтому тут суммарный размер больше.
Если конец BLR процедуры пересекает границу 64К (от начала всей последователности), то мы имеем твой баг. Он исправлен в FB2, возможно будет исправлен и в FB 1.5.2, если такой будет выпущен.

Сейчас его можно обойти пересозданием процедуры, т.е. вместо ALTER делать DROP\CREATE. Либо разделяй процедуру на части и\или уменьшай кол-во параметров
...
Рейтинг: 0 / 0
Размер ХП
    #32636757
Andrey Dmitrienko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пересоздание процедуры помогло - большое спасибо за информацию. Дальше вероятно прийдется делить процедуры или заниматься более детальной оптимизацией кода.

А как на счет ограничения размера BLR в FB2 - оно так и останется 64к, или увеличится (т.е. на что можно ориентироваться в дальнейшем при написании ХП)?
...
Рейтинг: 0 / 0
Размер ХП
    #32636939
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey DmitrienkoА как на счет ограничения размера BLR в FB2 - оно так и останется 64к, или увеличится (т.е. на что можно ориентироваться в дальнейшем при написании ХП)?А ты скажи - какой у тебя есть максимальный р-р BLR ? Т.е. сделай что-то типа

Код: plaintext
1.
2.
3.
4.
5.
SELECT FIRST  1 
  RDB$PROCEDURE_NAME, 
  F_BLOBSIZE(RDB$PROCEDURE_BLR), 
  F_BLOBSIZE(RDB$PROCEDURE_SOURCE)
  FROM RDB$PROCEDURES
ORDER BY  2  DESC

И ещё скажи - зачем писать гигантские процедуры ? Может настоящая проблема в этом ;)
...
Рейтинг: 0 / 0
Размер ХП
    #32639017
Andrey Dmitrienko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А кто такой F_BLOBSIZE? Вероятно это ф-я, которая возвращает размер blob-поля, но у меня ее нет.

Собственно граничный размер мне нужен, чтоб знать, на что я могу расчитывать при написании ХП.

Гиганские процедуры писать действительно незачем: проблема вылезла при написании довольно простой, но объемной процедуры. Она занимается тем, что разворачивает параметры отчета, лежащие в таблице в виде код параметра - значение в одну строчку т.к. отчет печатается построчно, а таких параметров в разных отчетах может быть много (на данный момент 30*2 - в каждой строке итогового отчета идет строчка за текущий и предыдущий годы и их изменение). Еще она выполняет подсчет итогов по деревовидной иерархии организаций этих-же параметров -> добавляется еще куча переменных для подсчета промежуточных сумм, а еще их надо инициализировать 0, вот и получилось огоромное кол-во кода типа A = 0, B = 0 или A = A + A1 и т.п.

Вот если-бы можно было в ХП работать с массивами, эта огромная процедура сразу уменьшилась бы раза в 3.
...
Рейтинг: 0 / 0
Размер ХП
    #32639060
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey DmitrienkoА кто такой F_BLOBSIZE? FreeUDFLib
...
Рейтинг: 0 / 0
Размер ХП
    #32640234
Andrey Dmitrienko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел данные по размерам BLR и SOURSE для ХП:

исходный размер: SOURSE - 61249, BLR - 33585
Начал добавлять к ней небольшой кусочек - стал грязно ругаться. После пересоздания порцедуры размер SOURSE - 61245, BLR - 34412. До 64к BLR явно не дотягивает.
...
Рейтинг: 0 / 0
Размер ХП
    #32640618
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторисходный размер: SOURSE - 61249, BLR - 33585 ...
После пересоздания порцедуры размер SOURSE - 61245О том и речь -не в размере BLR дело.

Теперь к 61245 добавь :
длину имени процедуры + 4

сумму (длин имён старых параметров + 4)

сумму (длин имён новых параметров + 9)

ещё 9
Больше чем 64К получилось ?

Да, кстати, выходит у тебя более 100 пар-ров ? Не многовато ли ? ;)
...
Рейтинг: 0 / 0
Размер ХП
    #32643748
Andrey Dmitrienko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Параметров всего 77 (11 входящих + 66 возвращаемых). Может это конечно и много, но другого способа получить 63 колонки в отчете я пока не придумал.

Просто когда я что-либо пишу, очень желательно знать какие средства есть у меня в распоряжении. Если ограничение на размер ХП жесткое и в дальнейшем не будет расширено - ну и ладно. Будет над чем подумать в плане оптимизации кода. Главное, чтоб сервер возвращал корректное сообщение об ошибке и все будет ОК.
...
Рейтинг: 0 / 0
Размер ХП
    #32643870
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Dmitrienko...другого способа получить 63 колонки в отчете я пока не придумал.


Seagate Crystal Reports может делать динамические колонки в отчетах...

В этом случае, все колонки идут построчно...
...
Рейтинг: 0 / 0
Размер ХП
    #32645766
Andrey Dmitrienko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olol
Seagate Crystal Reports может делать динамические колонки в отчетах...

В этом случае, все колонки идут построчно...

Весь вопрос в том, сколько он стоит
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Размер ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]