FirebirdDB не может запустить процедуру, пока его резервная копия Db может - PullRequest
1 голос
/ 16 марта 2011

У меня возникла проблема в моей базе данных, я использую Firebird 1.5.3, и она нормально работает до тех пор, пока нет чтения или записи обычным образом, но когда я запускаю процедуру, я получаю пустой результат строки и следующее сообщение:

Арифметическое исключение, переполнение числа или усечение строки.

Код SQL: -802 Номер ошибки IB: 335544321

Поэтому я сравнил его с моимрезервное копирование дБ месяц назад, все работало нормально, я получаю данные в строках.Чтобы убедиться, что мой код не изменился, я скопировал и вставил обе процедуры в WinMerge (diff Comparer), но ничего не изменилось.Чтобы убедиться, что моя ошибка произошла из данных, я запускаю процедуру для старой датированной транзакции (данные за 1 год), но все равно получаю это сообщение.

Я проверяю арифметическую логику в процедуре, модифицируя, но не повезло.Кто-нибудь может помочь с этим?

Спасибо кучу,

Ответы [ 2 ]

1 голос
/ 22 марта 2011

После долгого отслеживания кода и данных я обнаружил препятствие, которое каким-то образом меня беспокоило. Произошло изменение в основных данных, которые теперь имеют более длинный характер (varchar). В моей процедуре он был помещен в меньший размер varchar, скажем, 10 символов. В то время как новая строка около 15. Здесь идет ошибка ... или усечение строки .... . Но в любом случае спасибо за ваше внимание к моей проблеме и спасибо за подсказки, которые вы написали, это как-то меня спасает, дает мне идею отследить.

Спасибо,

0 голосов
/ 18 марта 2011

Различное поведение (в резервной базе данных и в реальном времени) с точно такими же данными странно. Возможно, какая-то другая процедура или триггер портят ваш запрос в динамической базе данных.

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

"Числовое переполнение или усечение строки." - ошибка, которую вы получаете.

  • Имеет ли запрос SUM() или другой функция аггегата?
  • Имеет ли она какую-либо функцию для работы со строками?

Если да по любому из вышеперечисленных, попробуйте удалить любую такую ​​часть, одну за другой, и выполнить измененный запрос. Таким образом, вы можете определить, какая часть запроса вызывает ошибку.


Примечание: одна и та же структура БД, одни и те же данные и один и тот же запрос делают не всегда с одинаковыми результатами из-за недетерминированных функций, например NOW() и RAND() Если результаты этих функций используются в дальнейших вычислениях, то арифметические ошибки, такие как деление на 0 или переполнение, или другие типы ошибок могут возникать в одном прогоне, а не в другом.

...