2012-04-09 9 views
1

私はoracleにとってとても新しいですが、私はクラスでそれについて学んでいましたが、最近はnumberというデータ型が出てきました。スケールと精度(s、p)に関するドキュメントを読んだことがありますが、型の正しい使用法についてはまだ肯定的ではありません。Oracle番号のデータ型とその厳密度

たとえば、パーセント値を小数点として保存したいとします。小数点は0から1までの任意の数になり、小数点以下3桁までの小数点以下を持つことがあります。記憶すべき

いくつかの可能な小数が含まれる:

.66 
.553 
1.00 

を私は列NUMBER(4,3)を作るとしたらということな作業のみ2つの数字があったとしても?下記を参照

.22 
.10 
.35 
etc... 

要するに、数字の種類では、正確なサイズが満たされている必要がありますか?例えば。 NUMBER(4,3)は、挿入されたデータが4桁であり、3桁が小数点以下になることは絶対に必要ですか?

ありがとうございました!

+0

「数値(4,3)」は、-9.999〜9.999の値を保持できます。数値を有効な範囲内に保つために、 'number(4,3) '型の宣言に加えて、チェック制約が呼び出されます。 'テーブルtを作成する(n番(4,3)制約t_c0チェック(0と1の間のt)) ' –

答えて

2

列のデータ型によって、格納可能な値の範囲が制限されます。しかし、彼らは特定の長さや精度を強制するものは何もしません。

VARCHAR2(100)列に1文字またはNULLを格納できるのと同じように、3桁未満の精度と4桁未満のスケールを格納できます。たとえば、値0と6.1は両方ともNUMBER(4,3)列に対して完全に有効です。精度の桁数が多すぎる値を挿入すると、値は列定義で指定された精度に自動的に丸められます。

SQL> create table foo (
    2 col1 number(4,3) 
    3 ); 

Table created. 

SQL> insert into foo values(9.999); 

1 row created. 

SQL> insert into foo values (0); 

1 row created. 

SQL> insert into foo values(6.1); 

1 row created. 

SQL> insert into foo values(1.2345); 

1 row created. 

SQL> select * from foo; 

     COL1 
---------- 
    9.999 
     0 
     6.1 
    1.235 
+0

ありがとう、VARCHARの比較は私には完璧な意味を持っていました。 –

+0

テストする時間はありませんが、より精度の高い値を割り当てる場合、Oracleは丸めたり切り捨てたりすると思います。例えば、 'number(4、3)'カラムに0.225232を格納することができます。 –

+0

私は上記の記述が間違っているという事実を知っています。私がそれをテストしたとき、その数字が列にはあまりにも正確であるというエラーが出されました。 –

関連する問題