Страница 1 из 1

isql и Single isql command exceeded maximum buffer size

Добавлено: 27 фев 2008, 13:29
Veterok
Всем привет
Firebird 2.0.3
С помощью isql.exe хочу выполнить скрипт по созданию процедуры, длина которой ~1200 строк. Процедура не создается, а в логе посреди тескта процедуры пишет ошибку "Single isql command exceeded maximum buffer size".

Как ему (isql) этот буфер увеличить или какие другие способы победы?

Добавлено: 27 фев 2008, 14:46
WildSery
Текст процедуры укладывается в 64 килобайта?

Добавлено: 27 фев 2008, 14:52
Veterok
WildSery писал(а):Текст процедуры укладывается в 64 килобайта?
75K

Добавлено: 27 фев 2008, 17:16
WildSery
Способов увеличить буфер нет.
Разбивай на вложенные процедуры.

Добавлено: 27 фев 2008, 17:20
Veterok
WildSery писал(а):Способов увеличить буфер нет.
Разбивай на вложенные процедуры.
спасибо. что же так все запущено?

Добавлено: 27 фев 2008, 18:03
Merlin
Гигантизм - признак вырождения. В биологии. В пргораммировании - обычно проблем в консерватории.

Добавлено: 27 фев 2008, 18:13
Veterok
Merlin писал(а):Гигантизм - признак вырождения. В биологии. В пргораммировании - обычно проблем в консерватории.
да не вопрос. я же не влепил всю логику приложения в одну процедуру. просто так получилось после перевода кода с Oracle с множеством комментариев, вложенных циклов и т.д. почему ограничение 64К? почему я должен задумываться о размере хранимой процедуры?

Добавлено: 27 фев 2008, 18:27
WildSery
Не трясите тут ораклом.
Такое вот ограничение, "as designed", и ничего не поделаешь.
Впрочем, никто не жалуется. Просто знаем об этой особенности, этого хватает.

Добавлено: 27 фев 2008, 18:29
Veterok
WildSery писал(а):Не трясите тут ораклом.
Такое вот ограничение, "as designed", и ничего не поделаешь.
Впрочем, никто не жалуется. Просто знаем об этой особенности, этого хватает.
проглотил

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 19 сен 2008, 14:48
Sikambr
Аналогично автору ветки, с помощью isql.exe выполняю скрипт по созданию процедуры, текст которой весит 50K.
В Interbase 7.5 выполняется без проблем, а в Interbase 2007 sp2 вылетает:
Single isql command exceeded maximum buffer size

Подозреваю, что IB2007 что-то не понравилось в синтаксисе, но в каком месте?
Убирал текст до тех пор, пока не дошел до того момента, что убирая строку в любом месте, не нарушая синтаксиса, скрип работает, т.е. ничего криминального не нашел.

Процедура написана и отлажена очень давно, разбивать и менять что-то не представляется возможным.
Как вариант, воспользовался утилитой IBEScript.exe, но хотелось бы обойтись стандартными средствами.

Вот текст хранимки: http://rapidshare.com/files/146552986/m ... e.sql.html

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 19 сен 2008, 15:49
kdv
Вот текст хранимки
ужас. у вас и в дельфях процедуры по 10 страниц?

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 19 сен 2008, 16:04
WildSery
Почему вылетает - ХЗ. Не юникодовое соединение? Хотя не пробовал, нужно ли буфер бОльшего размера для такого.

А текст действительно сильный. Производит впечатление.
Не теряя читабельности можно за счёт одних только пробелов сократить в два раза.

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 19 сен 2008, 17:46
Sikambr
WildSery писал(а):Почему вылетает - ХЗ. Не юникодовое соединение? Хотя не пробовал, нужно ли буфер бОльшего размера для такого.
Вы возможно и правы, насчет юникода.
Когда сокращал тело процедуры, то она откомпилилась с весом ~35K.
Заголовок и объявленные переменные весят 3K, остается 32K на тело, умножаем на 2-x байтный символ и получаем 64K.

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 20 сен 2008, 16:27
Sikambr
Немного я вам соврал: в скрипте за этой большой хранимкой находилось еще много процедур и всякого другого.
Так вот, в логе даже упоминания этой процедуры (A) нет, а сразу сообщение "Single isql command exceeded maximum buffer size".
И еще вырезана часть текста (B), которая должна была идти сразу за этой процедурой.
В сумме (A) и (B) весят примерно 64K. Думаю, что ISQL где-то пропустил закрывающий END, хотя возможно и ошибаюсь.

Вынес я эту процедуру в отдельный скрипт и выполнив его в ISQL, в логе получил вместо текста этой процедуры сообщение
"Expected end of statement, encountered EOF".

Методом тыка обнаружил, что в разных местах текста процедуры есть 4-е строки:

Код: Выделить всё

Save_Flat_Div = '';
Если заменить просто кавычки и написать например:

Код: Выделить всё

Save_Flat_Div = '$$$';
то скрипт выполняется!

Не смог понять логику возникновения этой ошибки :( Менял местами операторы, танцевал с бубном...
Но цель достигнута, результатом доволен :)
Всем спасибо за внимание.

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 21 сен 2008, 10:06
Tonal
Sikambr писал(а): ...Думаю, что ISQL где-то пропустил закрывающий END, хотя возможно и ошибаюсь.

Вынес я эту процедуру в отдельный скрипт и выполнив его в ISQL, в логе получил вместо текста этой процедуры сообщение
"Expected end of statement, encountered EOF".

Методом тыка обнаружил, что в разных местах текста процедуры есть 4-е строки:

Код: Выделить всё

Save_Flat_Div = '';
Если заменить просто кавычки и написать например:

Код: Выделить всё

Save_Flat_Div = '$$$';
то скрипт выполняется!
А вот это, похоже, нужно в трекер.
Можешь сделать скрипт, на котором поведение повторяется?

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 22 сен 2008, 10:03
Sikambr
Tonal писал(а): А вот это, похоже, нужно в трекер.
Можешь сделать скрипт, на котором поведение повторяется?
К сожалению не смог сделать скрипт, чтобы он не был привязан к моим таблицам и процедурам :(
Если просто указать эти строки, то скрипт выполняется.
Видать это зависит, что идет после или до этих злощастных строк.
Немного разгребусь с делами и попробую еще раз.

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 22 сен 2008, 11:55
WildSery
Tonal писал(а):А вот это, похоже, нужно в трекер.
Можешь сделать скрипт, на котором поведение повторяется?
В какой трекер, у него IB2007 :)

Re: isql и Single isql command exceeded maximum buffer size

Добавлено: 22 сен 2008, 13:17
kdv
В какой трекер, у него IB2007
тогда в этот трекер - http://qc.codegear.com/wc/qcmain.aspx