10385274000がOracleのNUMBER(10)に適合するかどうかを知るにはどうすればよいですか?
質問
私は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
ありがとうございます!!!
ありがとうございましたstackoverflow
編集
自分への注意(問題が何であったかを忘れないでください)
データベーステーブルにイベントの時間を保存するこのOracle製品がありました
START_TIME|END_TIME
毎晩、この情報を別のテーブルにバックアップしますが、処理中に変換を実行します。次のように保存します:
TOTALTIME
問題は、このフィールドがENDTIME-STARTTIMEを減算して計算されるときに発生します。結果の数値は、 NUMBER(10)
として定義されているこの列に格納されますまあ、END_TIME-START_TIMEが時間(約4か月程度)で遠すぎると、値(ミリ秒単位)が非常に大きくなり、ターゲット列に収まらないことがわかります(コード内のendTime.getTime()-startTime.getTime()のようなもの)
これはすべて簡単すぎてばかげているように聞こえますが、見つけるのに4日以上かかりました。これはクローズドアプリケーションであるため、何が起こっているのかわからなかったため、スタックトレース。
これを見つけるには、プロセス全体をリバースエンジニアリングする必要がありました(旧式の意味では、手作業で、明らかにソースなしで)。
やったとき、<!> quot; handcoded migrator <!> quot;にも同じエラーがあります。解決方法を見つけてください!
解決
NUMBER(10)の数字10は、フィールドサイズを指定します。つまり、フィールドには最大10文字の数値を保持できます。番号は11桁であるため、値は大きすぎて収まりません。 (<!> lt;)100億(10 000 000 000)より小さいものは問題なく挿入できます。挿入する前に値を検証するかどうかを確認する必要があります。