2017-12-17 26 views
0

私は、Oracle SQL Developerで次の文を挿入しようとしている:Numberの精度と位取りが間違っていますか?

INSERT INTO ACC 
VALUES (1245890, 234.50, 'Broomhill', '15-NOV-2003', 100.00); 

文がエラーなしで十分に挿入し、そのデータを見て、行が2番目と4番目の値が表示されることを表示したときに私は気づきました小数点以下1桁です。

(234.50と100.00ことになって例えば234.5と100.0)

私はそれが正しく表示できるようにするコードを作成し、私のテーブルの精度とスケールを増加させようとしました。

CREATE TABLE ACC 
(
"ACCNO" NUMBER(7), 
"BALANCE" NUMBER(5,2), 
"BRANCH" VARCHAR(15), 
"OPENED" DATE, 
"BONUS" NUMBER(5,2) 
); 

私は

CREATE TABLE ACC 
(
"ACCNO" NUMBER(7), 
"BALANCE" NUMBER(5,3) 
"BRANCH" VARCHAR(15), 
"OPENED" DATE, 
"BONUS" NUMBER(5,3) 
); 

わずか

バランスとBONUSのデータ型を変更する代わりに、私はそれを言ってエラーを取得:私は私のコードで間違って

Error starting at line : 94 in command - 
INSERT INTO ACC 
VALUES (1245890, 234.50, 'Broomhill', '15-NOV-2003', 100.00) 
Error report - 
ORA-01438: value larger than specified precision allowed for this column 

何をしているのですか?値を正しく表示するにはどうすればいいですか?

+0

をフォーマットモデルを見てください。保存されるのは、あなたが望むようにデータをフォーマットするのに必要な情報です。 – Ben

+0

この数字はお金を表していますか?もしそうなら、ここで確認してください:https://stackoverflow.com/questions/29014283/sql-datatype-to-use-when-inserting-money –

+0

ところで、日付リテラルは 'date 'のように書かれています2003-11-03 ''。 –

答えて

3

NUMBER(5, 3)は、5桁の数字で、小数点以下3桁です.2つは左にあります。値「100.00」は左に3つあるため、適合しません。

あなたは望んでいるようです:NUMBER(6, 3)

+0

100.00と正しく表示されますが、234.50はまだ234.5と表示されています –

+0

@HenryGreenゼロがないことは重要ではありません。つまり、.5の右側にゼロを何度でも書き込むことができ、論理的な意味は変わりませんその数のこれは、Oracleの書式設定機能を使用して処理することも、プレゼンテーション・レイヤーで処理することもできます。 –

+0

しかし、234.50と234.5には大きな違いがあります。その余分な0はそれを強調するために必要です、私はそれを表示するために、書式設定関数を使用する方法がわかりません。 –

2

数値はテーブルに正しく保存されますが、適切な書式マスクを使用する必要があるため、数値は必要な方法で表示されません。次に例を示します。

SQL> select to_char(234.50, '990D00') val_1, 
    2   to_char(100, '990D00') val_2 
    3 from dual; 

VAL_1 VAL_2 
------- ------- 
234,50 100,00 

SQL> 

これはSQL * Plusです。 Forms、Reports、Apexなどの他の(Oracle)ツールで設定できます。通常、アイテムのプロパティ・パレット・ウィンドウに表示されます。

は、標準的な答えは、これはあなたのデータ_accessing_コードを扱うべきであることを書式設定の問題であるということです、https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm

関連する問題