isql и Single isql command exceeded maximum buffer size
isql и Single isql command exceeded maximum buffer size
Всем привет
Firebird 2.0.3
С помощью isql.exe хочу выполнить скрипт по созданию процедуры, длина которой ~1200 строк. Процедура не создается, а в логе посреди тескта процедуры пишет ошибку "Single isql command exceeded maximum buffer size".
Как ему (isql) этот буфер увеличить или какие другие способы победы?
Firebird 2.0.3
С помощью isql.exe хочу выполнить скрипт по созданию процедуры, длина которой ~1200 строк. Процедура не создается, а в логе посреди тескта процедуры пишет ошибку "Single isql command exceeded maximum buffer size".
Как ему (isql) этот буфер увеличить или какие другие способы победы?
да не вопрос. я же не влепил всю логику приложения в одну процедуру. просто так получилось после перевода кода с Oracle с множеством комментариев, вложенных циклов и т.д. почему ограничение 64К? почему я должен задумываться о размере хранимой процедуры?Merlin писал(а):Гигантизм - признак вырождения. В биологии. В пргораммировании - обычно проблем в консерватории.
Re: isql и Single isql command exceeded maximum buffer size
Аналогично автору ветки, с помощью 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
В 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
ужас. у вас и в дельфях процедуры по 10 страниц?Вот текст хранимки
Re: isql и Single isql command exceeded maximum buffer size
Почему вылетает - ХЗ. Не юникодовое соединение? Хотя не пробовал, нужно ли буфер бОльшего размера для такого.
А текст действительно сильный. Производит впечатление.
Не теряя читабельности можно за счёт одних только пробелов сократить в два раза.
А текст действительно сильный. Производит впечатление.
Не теряя читабельности можно за счёт одних только пробелов сократить в два раза.
Re: isql и Single isql command exceeded maximum buffer size
Вы возможно и правы, насчет юникода.WildSery писал(а):Почему вылетает - ХЗ. Не юникодовое соединение? Хотя не пробовал, нужно ли буфер бОльшего размера для такого.
Когда сокращал тело процедуры, то она откомпилилась с весом ~35K.
Заголовок и объявленные переменные весят 3K, остается 32K на тело, умножаем на 2-x байтный символ и получаем 64K.
Re: isql и Single isql command exceeded maximum buffer size
Немного я вам соврал: в скрипте за этой большой хранимкой находилось еще много процедур и всякого другого.
Так вот, в логе даже упоминания этой процедуры (A) нет, а сразу сообщение "Single isql command exceeded maximum buffer size".
И еще вырезана часть текста (B), которая должна была идти сразу за этой процедурой.
В сумме (A) и (B) весят примерно 64K. Думаю, что ISQL где-то пропустил закрывающий END, хотя возможно и ошибаюсь.
Вынес я эту процедуру в отдельный скрипт и выполнив его в ISQL, в логе получил вместо текста этой процедуры сообщение
"Expected end of statement, encountered EOF".
Методом тыка обнаружил, что в разных местах текста процедуры есть 4-е строки:Если заменить просто кавычки и написать например:
то скрипт выполняется!
Не смог понять логику возникновения этой ошибки Менял местами операторы, танцевал с бубном...
Но цель достигнута, результатом доволен
Всем спасибо за внимание.
Так вот, в логе даже упоминания этой процедуры (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
А вот это, похоже, нужно в трекер.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
К сожалению не смог сделать скрипт, чтобы он не был привязан к моим таблицам и процедурамTonal писал(а): А вот это, похоже, нужно в трекер.
Можешь сделать скрипт, на котором поведение повторяется?
Если просто указать эти строки, то скрипт выполняется.
Видать это зависит, что идет после или до этих злощастных строк.
Немного разгребусь с делами и попробую еще раз.
Re: isql и Single isql command exceeded maximum buffer size
В какой трекер, у него IB2007Tonal писал(а):А вот это, похоже, нужно в трекер.
Можешь сделать скрипт, на котором поведение повторяется?
Re: isql и Single isql command exceeded maximum buffer size
тогда в этот трекер - http://qc.codegear.com/wc/qcmain.aspxВ какой трекер, у него IB2007