FirebirdDB не может запустить процедуру, пока ее резервная база данных может

StackOverflow https://stackoverflow.com/questions/5321893

Вопрос

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

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

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

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

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

Спасибо большое,

Это было полезно?

Решение

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

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

Другие советы

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

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

«числовое переполнение или усечение строки». это ошибка, которую вы получаете.

  • Есть ли в запросе SUM() или другая функция Aggegate?
  • Есть ли у него какая-либо функция манипулирования строками?

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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top