プロダクションエラーのトラブルシューティングに一週間勤務していました。10385274000が適合するかどうかは、どのように知ることができますか:Oracleの場合はNUMBER(10)ですか?
私は最終的にすべての混乱を引き起こしている犯人レコードを見つけることができるポイントを得ました。私は、次のエラーメッセージが持っている
:私はこれは間違ったデータかもしれないと思うすべての情報から
java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-01438: value larger than specified precision allows for this column
Eventuallを、システムが挿入しようとしている。中へ
10385274000
NUMBER(10)
この値が適合するかどうかはどうすればわかりますか?
はあなたのミシェル・トッドの提案を1として
EDIT
ありがとう:
create table xyz(testfield number(10));
insert into xyz values(10385274000)
Error: ORA-01438: value larger than specified precision allowed for this column
は君たちをありがとう!
は(問題が何であったかを忘れないように)あなたが私の自己にEDIT
ノートをStackOverflowの感謝
は、私は、データベーステーブル内の時間を格納し、このOracle製品を持っていましたイベントSTART_TIME|END_TIME
この情報を毎晩別のテーブルにバックアップしますが、pプロセス内の変換をerformsします。
TOTALTIME
このフィールドは、ENDTIME - STARTTIMEを引いて計算すると問題になります。 NUMBER(10)
時に遠すぎる(約4ヶ月程度)であるEND_TIME-START_TIMEあればよく、それが判明した値(中:結果の数は以下のように定義され、この列に格納されています(コードの中にendTime.getTime() - startTime.getTime()のようなものがあると思います)
これはあまりにも簡単で愚かすぎますしかし、これは閉鎖されたアプリケーションなので、私は何が起こっていたのかという手がかりを持っていなかったので、私には4日以上かかることがありました。スタックトレースだけでした。
私はこれを見つけるためにプロセス全体をリバースエンジニアリングしなければなりませんでした(言葉の古い意味では、手で、明らかにソースから)。
私がしたとき、私は "手作業でコード化されたマイグレーション"に同じエラーがあり、それを解決する方法を見つけました!
「緊急」という単語を使用する場合は、進行中の単語ではなく読みやすい形式で使用してください。それが緊急であれば緊急ですが、緊急であることを人々は知っていなければなりません。それは「Urgeeeent!」です。 –
これを行うには、数値(10)を含むtempテーブルを作成し、その値を挿入しようとします。それが機能すれば、それは問題ではありません。 –