2009-08-01 13 views
4

プロダクションエラーのトラブルシューティングに一週間勤務していました。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日以上かかることがありました。スタックトレースだけでした。

私はこれを見つけるためにプロセス全体をリバースエンジニアリングしなければなりませんでした(言葉の古い意味では、手で、明らかにソースから)。

私がしたとき、私は "手作業でコード化されたマイグレーション"に同じエラーがあり、それを解決する方法を見つけました!

+0

「緊急」という単語を使用する場合は、進行中の単語ではなく読みやすい形式で使用してください。それが緊急であれば緊急ですが、緊急であることを人々は知っていなければなりません。それは「Urgeeeent!」です。 –

+1

これを行うには、数値(10)を含むtempテーブルを作成し、その値を挿入しようとします。それが機能すれば、それは問題ではありません。 –

答えて

10

NUMBER(10)の10は、フィールドサイズを指定します。つまり、フィールドには最大10文字の長さを保持できます。あなたの番号は11桁ですので、値は大きくなります。 (<)100億(10000000 000)より小さいものは問題なく挿入できます。挿入する前に値を検証するかどうかを確認する必要があります。

+0

彼らが文字だったら? – OscarRyz

+0

簡単なGoogleのリファレンスページ:http://www.techonthenet.com/oracle/datatypes.php – Bevan

+0

Number(10)の "10"は、合計桁数を指定します。オプションで、小数点以下の桁数を指定することもできます。たとえば、numeric(7,2)は小数点の前に5桁、小数点以下2桁の数字です。 – Bevan

関連する問題