Страница 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-е строки:
Если заменить просто кавычки и написать например:
то скрипт выполняется!
Не смог понять логику возникновения этой ошибки

Менял местами операторы, танцевал с бубном...
Но цель достигнута, результатом доволен

Всем спасибо за внимание.
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-е строки:
Если заменить просто кавычки и написать например:
то скрипт выполняется!
А вот это, похоже, нужно в трекер.
Можешь сделать скрипт, на котором поведение повторяется?
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