Я всю неделю работала над устранением производственной ошибки.
В конце концов я понял, что могу найти запись о виновнике, которая является причиной всего беспорядка.
У меня следующее сообщение об ошибке:
java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column
Из всей информации, думаю, это могут быть неверные данные, система пытается вставить:
10385274000
В НОМЕР (10)
Как я могу узнать, подходит ли это значение или нет?
Спасибо
EDIT
Согласно предложению Мишеля Тодда:
create table xyz( testfield number( 10 ) );
insert into xyz values( 10385274000 )
Error: ORA-01438: value larger than specified precision allowed for this column
Спасибо, ребята !!!
Спасибо stackoverflow
EDIT
Заметки к себе (чтобы не забыть в чем проблема)
У меня был этот продукт Oracle, который хранит в таблице базы данных время события
START_TIME|END_TIME
Оказывается, каждую ночь он копирует эту информацию в другую таблицу, но выполняет процесс преобразования в процессе. Хранится как:
TOTALTIME
Проблема возникает, когда это поле рассчитывается путем вычитания ENDTIME - STARTTIME. Полученный номер сохраняется в этом столбце, который определяется как: NUMBER (10)
Что ж, получается, если END_TIME-START_TIME слишком далеко во времени (около 4 месяцев или около того), значение (в миллисекундах) будет настолько большим, что не поместится в целевой колонке (я думаю, что оно имеет что-то вроде endTime.getTime () - startTime.getTime () внутри кода)
Все это звучит слишком легко и слишком глупо сейчас, но мне потребовалось 4 дня +, чтобы выяснить это, потому что, поскольку это закрытое приложение, я понятия не имел, что происходит, единственное, что у меня было, было трассировка стека.
Мне пришлось перепроектировать (в старом смысле слова, от руки и, очевидно, без источника) весь процесс, чтобы выяснить это.
Когда я это сделал, у меня возникла та же ошибка в моем "ручном коде-миграторе", и я узнал, как ее решить!