Oracle number型別的語法和用法

2021-06-12 06:26:04 字數 1551 閱讀 6609

number型別的語法很簡單,就是:

number(p,s)

p,s都是可選的,假如都不填,p預設為38,s預設為-48~127。

1. 精度(precision),或總位數。預設情況下,精度為38位,取值範圍是1~38之間。也可以用字元*表示38。

2. 小數字置(scale),或小數點右邊的位數。小數字數的合法值為-48~127,其預設值取決於是否指定了精度。如果沒有知道精度,小數字數則預設有最大的取值區間。如果指定了精度,小數字數預設為0(小數點右邊一位都沒有)。例如,定義為number的列會儲存浮點數(有小數),而number(38)只儲存整數資料(沒有小數),因為在第二種情況下小數字數預設為0.

如下sql語句:

create table t ( msg varchar2(12.), num_col number(5,2) );

insert into t (msg,num_col) values ( '123.456', 123.456 );//執行成功,儲存的是123.46

insert into t (msg,num_col) values ( '1234', 1234 );//執行失敗,要保留2位小數,那麼整數字最多3位,現在是4位。

如果scale是負數怎麼樣,表示左邊整數字捨入幾位:

create table t ( msg varchar2(12.), num_col number(5,-2) );

insert into t (msg,num_col) values ( '123.45', 123.45 );//執行成功,儲存的是100

insert into t (msg,num_col) values ( '123.456', 123.456 );//執行成功,儲存的是100

其他資料型別:

1. numeric(p,s):完全對映至number(p,s)。如果p未指定,則預設為38.

2. decimal(p,s)或dec(p,s):完全對映至number(p,s)。如果p為指定,則預設為38.

3. integer或int:完全對映至number(38)型別。

4. smallint:完全對映至number(38)型別。

5. float(b):對映至number型別。

6. double precision:對映至number型別。

7. real:對映至number型別。

效能考慮:

一般而言,oracle number型別對大多數應用來講都是最佳的選擇。不過,這個型別會帶來一些效能影響。oracle number型別是一種軟體資料型別,在oracle軟體本身中實現。我們不能使用固有硬體操作將兩個number型別相加,這要在軟體中模擬。不過,浮點數沒有這種實現。將兩個浮點數相加時,oracle會使用硬體來執行運算。

換而言之,將一些列的number列相加,沒有將一系列float列相加來得快。因為float列的精度低很多,一般是6~12位。

比如:select sum(ln(cast( num_type as binary_double ) )) from t

比:select sum(ln(cast( num_type) )) from t 要快很多。

Oracle NUMBER型別研究

oracle提供了強大的資料型別number,他的格式為oracle number datatype 語法 number precision scale 其中簡稱 precision p scale s number p,s 範圍 1 p 38,84 s 127 儲存資料範圍 1.0e 130 nu...

ORACLE NUMBER型別詳解

1 number型別細講 oracle number datatype 語法 number precision scale 簡稱 precision p scale s number p,s 範圍 1 p 38,84 s 127 儲存資料範圍 1.0e 130 number value 1.0e 1...

ORACLE NUMBER型別詳解

1 number型別細講 oracle number datatype 語法 number precision scale 簡稱 precision p scale s number p,s 範圍 1 p 38,84 s 127 儲存資料範圍 1.0e 130 number value 1.0e 1...