FirebirdDB не может запустить процедуру, пока ее резервная база данных может
-
24-10-2019 - |
Вопрос
У меня возникла проблема с моей базой данных, я использую Firebird 1.5.3, и она работает нормально, пока не перестает читать или писать обычным способом, но когда я запускаю процедуру, я получаю результат пустой строки и следующее сообщение:
Арифметическое исключение, числовое переполнение или усечение строки.
SQL-код:-802 Номер ошибки IB:335544321
Итак, я сравнил его со своей резервной базой данных месяц назад, все работало нормально, я получаю данные в строках.Чтобы убедиться, что мой код не изменился, я скопировал и вставил обе процедуры в WinMerge (компаратор различий), но ничего не изменилось.Чтобы убедиться, что моя ошибка связана с данными, я запускаю процедуру для старой транзакции (данные 1 года назад), но все равно получаю это сообщение.
Я проверяю арифметическую логику в процедуре, вношу изменения, но безуспешно.Кто-нибудь может помочь с этим?
Спасибо большое,
Решение
После долгого отслеживания в коде и данных я нашел препятствие, которое каким -то образом меня вызывает. Было изменено в основных данных, которые теперь имеют длительный характер (Varchar). В моей процедуре он был помещен в меньший размер варчара, скажем, 10 символ. В то время как новая строка около 15. Вот ошибка ... или усечение строки ..... Анкет Но в любом случае, спасибо за ваше внимание к моей проблеме, и спасибо за подсказки, которые вы написали, это как -то спасает меня, дайте мне идею, чтобы проследить ее.
Спасибо, куча,
Другие советы
Разное поведение (в резервной базе данных и в реальной) с одинаковыми данными странно.Возможно, какая-то другая процедура или триггер мешает вашему запросу в активной базе данных.
Поскольку вы говорите, что не можете публиковать здесь код, я предлагаю кое-что, что вы можете попробовать устранить некоторые другие возможности.
«числовое переполнение или усечение строки». это ошибка, которую вы получаете.
- Есть ли в запросе
SUM()
или другая функция Aggegate? - Есть ли у него какая-либо функция манипулирования строками?
Если да по любому из вышеперечисленных пунктов, попробуйте удалить любую такую часть одну за другой и запустить измененный запрос.Таким образом, вы можете определить, какая часть запроса вызывает ошибку.
Примечание:Та же структура базы данных, те же данные и тот же запрос. нет всегда дают одни и те же результаты из-за недетерминированных функций, таких как NOW()
и RAND()
.Если результаты этих функций используются в дальнейших вычислениях, то арифметические ошибки, такие как деление на 0 или переполнение, или другие типы ошибок могут возникнуть в одном прогоне, а не в другом.