isql и Single isql command exceeded maximum buffer size

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
Veterok
Сообщения: 10
Зарегистрирован: 30 мар 2005, 10:47

isql и Single isql command exceeded maximum buffer size

Сообщение Veterok » 27 фев 2008, 13:29

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

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 фев 2008, 14:46

Текст процедуры укладывается в 64 килобайта?

Veterok
Сообщения: 10
Зарегистрирован: 30 мар 2005, 10:47

Сообщение Veterok » 27 фев 2008, 14:52

WildSery писал(а):Текст процедуры укладывается в 64 килобайта?
75K

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 фев 2008, 17:16

Способов увеличить буфер нет.
Разбивай на вложенные процедуры.

Veterok
Сообщения: 10
Зарегистрирован: 30 мар 2005, 10:47

Сообщение Veterok » 27 фев 2008, 17:20

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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 27 фев 2008, 18:03

Гигантизм - признак вырождения. В биологии. В пргораммировании - обычно проблем в консерватории.

Veterok
Сообщения: 10
Зарегистрирован: 30 мар 2005, 10:47

Сообщение Veterok » 27 фев 2008, 18:13

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 27 фев 2008, 18:27

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

Veterok
Сообщения: 10
Зарегистрирован: 30 мар 2005, 10:47

Сообщение Veterok » 27 фев 2008, 18:29

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

Sikambr
Сообщения: 41
Зарегистрирован: 03 ноя 2005, 08:31

Re: isql и Single isql command exceeded maximum buffer size

Сообщение Sikambr » 19 сен 2008, 14:48

Аналогично автору ветки, с помощью 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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: isql и Single isql command exceeded maximum buffer size

Сообщение kdv » 19 сен 2008, 15:49

Вот текст хранимки
ужас. у вас и в дельфях процедуры по 10 страниц?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: isql и Single isql command exceeded maximum buffer size

Сообщение WildSery » 19 сен 2008, 16:04

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

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

Sikambr
Сообщения: 41
Зарегистрирован: 03 ноя 2005, 08:31

Re: isql и Single isql command exceeded maximum buffer size

Сообщение Sikambr » 19 сен 2008, 17:46

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

Sikambr
Сообщения: 41
Зарегистрирован: 03 ноя 2005, 08:31

Re: isql и Single isql command exceeded maximum buffer size

Сообщение Sikambr » 20 сен 2008, 16:27

Немного я вам соврал: в скрипте за этой большой хранимкой находилось еще много процедур и всякого другого.
Так вот, в логе даже упоминания этой процедуры (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 = '$$$';
то скрипт выполняется!

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

Tonal
Сообщения: 104
Зарегистрирован: 30 сен 2007, 13:42

Re: isql и Single isql command exceeded maximum buffer size

Сообщение Tonal » 21 сен 2008, 10:06

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

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

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

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

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

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

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

Sikambr
Сообщения: 41
Зарегистрирован: 03 ноя 2005, 08:31

Re: isql и Single isql command exceeded maximum buffer size

Сообщение Sikambr » 22 сен 2008, 10:03

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Re: isql и Single isql command exceeded maximum buffer size

Сообщение WildSery » 22 сен 2008, 11:55

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: isql и Single isql command exceeded maximum buffer size

Сообщение kdv » 22 сен 2008, 13:17

В какой трекер, у него IB2007
тогда в этот трекер - http://qc.codegear.com/wc/qcmain.aspx

Ответить