私は製造エラーのトラブルシューティングに 1 週間取り組んでいました。
私は最終的に、すべての混乱を引き起こしている犯人の記録を見つけることができるポイントを得ました.
次のエラー メッセージが表示されます。
java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column
最終的に、これは間違ったデータである可能性があると思われるすべての情報から、システムは挿入しようとしています:
10385274000
NUMBER(10)に
その値が適合するかどうかはどうすればわかりますか?
ありがとうございました
編集
ミシェル・トッドの提案によると:
create table xyz( testfield number( 10 ) );
insert into xyz values( 10385274000 )
Error: ORA-01438: value larger than specified precision allowed for this column
君たちありがとう!!!
ありがとうスタックオーバーフロー
編集
自分へのメモ (何が問題だったかを忘れないように)
イベントの時間をデータベーステーブルに保存するこのOracle製品がありました
START_TIME|END_TIME
毎晩、この情報を別のテーブルにバックアップしますが、その過程で変換を実行します。次のように保存されます。
TOTALTIME
問題は、このフィールドが ENDTIME - STARTTIME を減算して計算されるときに発生します。結果の数値は、次のように定義されたこの列に格納されます: NUMBER(10)
END_TIME-START_TIME が時間的に離れすぎている場合 (約 4 か月程度)、値 (ミリ秒単位) が非常に大きくなり、ターゲット列に収まらないことがわかります (endTime のようなものがあると思います)。 .getTime() - コード内の startTime.getTime() )
これはすべて簡単すぎてばかげているように思えますが、これを見つけるのに4日以上かかりました.
これを見つけるには、プロセス全体をリバースエンジニアリングする必要がありました(古い意味で、手動で、明らかにソースなしで)。
私がそれを行ったとき、「手書きのマイグレーター」で同じエラーが発生し、その解決方法を見つけました!