【NUMBER】Oracle的NUMBER資料型別特點
Oracle的NUMBER資料型別內部使用科學計數法以可變長度格式來儲存資料。使用1B儲存指數,而另外20B(可變)用於儲存該數字剩下的部分。這種儲存模式使得NUMBER資料型別可以表示的精度為38位。簡單的對Oracle數字型別的儲存特點進行簡單探索。
1.確定數字所佔位元組的大小
可以使用vsize函式獲得儲存數字時佔用的位元組。
SQL> select vsize(100) from dual;
VSIZE(100)
----------
2
表示在儲存數字100時將會使用2B空間進行儲存,其中1B用於儲存數字,另外1B用於儲存指數。
2.使用dump獲取數字的具體儲存資訊
SQL> select dump(100) from dual;
DUMP(100)
------------------
Typ=2 Len=2: 194,2
3.Oracle NUMBER型別定義的不同形式
Oracle是使用精度(precision)和範圍(scale)的方式來定義NUMBER資料型別的。如果使用特定的精度定義NUMBER,當超過所定義的精度時將會丟擲“ORA-01438: value larger than specified precision allowed for this column”報錯。具體舉例如下。
1)定義精度為6,範圍為2的欄位進行測試
SQL> drop table t purge;
Table dropped.
SQL> create table t (x number(6,2));
Table created.
2)符合精度和範圍時,成功插入
SQL> insert into t values(1234.56);
1 row created.
SQL> select * from t;
X
----------
1234.56
3)符合精度,但超出範圍時,會四捨五入
SQL> insert into t values(123.456);
1 row created.
SQL> select * from t;
X
----------
1234.56
123.46
可見數字“123.456”已被四捨五入為“123.46”。
4)當超出精度時,將丟擲ORA-01438錯誤
SQL> insert into t values(12345.67);
insert into t values(12345.67)
*
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column
有關數字型別的精度的描述請參見文章《【NUMBER】有關Oracle NUMBER型別定義中precision和scale的測試和總結》(http://space.itpub.net/519536/viewspace-557312)。
5)當定義數字型別時未給出範圍的定義時,表示以整數形式儲存
SQL> drop table t purge;
Table dropped.
SQL> create table t (x number(1));
Table created.
SQL> insert into t values (1.42312312321);
1 row created.
SQL> select * from t;
X
----------
1
SQL> insert into t values (1.52342341234);
1 row created.
SQL> select * from t;
X
----------
1
2
這裡同樣體現了四捨五入的原則。
4.小結
只要掌握了數字型別精度(precision)和範圍(scale)的含義,便可以很好地理解Oracle NUMBER型別。
Good luck.
secooler
10.11.13
-- The End --
1.確定數字所佔位元組的大小
可以使用vsize函式獲得儲存數字時佔用的位元組。
SQL> select vsize(100) from dual;
VSIZE(100)
----------
2
表示在儲存數字100時將會使用2B空間進行儲存,其中1B用於儲存數字,另外1B用於儲存指數。
2.使用dump獲取數字的具體儲存資訊
SQL> select dump(100) from dual;
DUMP(100)
------------------
Typ=2 Len=2: 194,2
3.Oracle NUMBER型別定義的不同形式
Oracle是使用精度(precision)和範圍(scale)的方式來定義NUMBER資料型別的。如果使用特定的精度定義NUMBER,當超過所定義的精度時將會丟擲“ORA-01438: value larger than specified precision allowed for this column”報錯。具體舉例如下。
1)定義精度為6,範圍為2的欄位進行測試
SQL> drop table t purge;
Table dropped.
SQL> create table t (x number(6,2));
Table created.
2)符合精度和範圍時,成功插入
SQL> insert into t values(1234.56);
1 row created.
SQL> select * from t;
X
----------
1234.56
3)符合精度,但超出範圍時,會四捨五入
SQL> insert into t values(123.456);
1 row created.
SQL> select * from t;
X
----------
1234.56
123.46
可見數字“123.456”已被四捨五入為“123.46”。
4)當超出精度時,將丟擲ORA-01438錯誤
SQL> insert into t values(12345.67);
insert into t values(12345.67)
*
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column
有關數字型別的精度的描述請參見文章《【NUMBER】有關Oracle NUMBER型別定義中precision和scale的測試和總結》(http://space.itpub.net/519536/viewspace-557312)。
5)當定義數字型別時未給出範圍的定義時,表示以整數形式儲存
SQL> drop table t purge;
Table dropped.
SQL> create table t (x number(1));
Table created.
SQL> insert into t values (1.42312312321);
1 row created.
SQL> select * from t;
X
----------
1
SQL> insert into t values (1.52342341234);
1 row created.
SQL> select * from t;
X
----------
1
2
這裡同樣體現了四捨五入的原則。
4.小結
只要掌握了數字型別精度(precision)和範圍(scale)的含義,便可以很好地理解Oracle NUMBER型別。
Good luck.
secooler
10.11.13
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-678166/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE NUMBER資料型別Oracle資料型別
- Oracle的number資料型別Oracle資料型別
- 10_深入解析Oracle number資料型別及os層number解析工具分享Oracle資料型別
- JS -- number資料型別詳解JS資料型別
- Oracle中number型別詳解Oracle型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- ORACLE NUMBER型別內部實現Oracle型別
- number資料型別在查詢中的顯示資料型別
- 淺析number型別的值型別
- 征服number型別的input框型別
- 測試NUMBER型別的效能型別
- EF:oracle的number型別對映為C#的boolean型別Oracle型別C#Boolean
- Python技術之Number資料型別介紹Python資料型別
- 【NUMBER】有關Oracle NUMBER型別定義中precision和scale的測試和總結Oracle型別
- number型別的顯示問題型別
- number(p,s)型別詳解型別
- [20150503]關於oracle的number型別.txtOracle型別
- javascript型別系統——Number數字型別JavaScript型別
- 【NUMBER】Oracle資料庫最佳化之理解NUMBER儲存機制Oracle資料庫
- 保留兩位小數:資料庫欄位型別NUMBER,Java欄位型別Double型別資料庫型別Java
- [20160828]number型別.txt型別
- Oracle System Change Number (SCN) Number 完全筆記Oracle筆記
- Python3學習筆記1,基本資料型別-Number、strPython筆記資料型別
- oracle中dump函式及oracle NUMBER型別內部儲存機制Oracle函式型別
- 一個簡單函式—Number型別轉換Date型別函式型別
- JS中的資料型別轉換:String轉換成Number的3種方法JS資料型別
- Python - 基本資料型別_Number 數字、bool 布林、complex 複數Python資料型別
- 請教大家了,JAVA讀取oracle的number(9)的資料欄位讀出來是什麼型別JavaOracle型別
- jsp頁面number型別自動轉為String型別JS型別
- oracle insert插入number(1)列的資料小測試Oracle
- Oracle實驗(03):number的使用Oracle
- 從0.1+0.2=0.30000000000000004再看JS中的Number型別JS型別
- [20190930]oracle raw型別轉化number指令碼.txtOracle型別指令碼
- 【原創】Oracle number date varchar2欄位型別佔用空間大小Oracle型別
- How Oracle Store Number internal(zt)Oracle
- Oracle中Number(p,s)的意義Oracle
- [20190930]oracle number型別儲存轉化指令碼.txtOracle型別指令碼
- [20191013]oracle number型別儲存轉化指令碼.txtOracle型別指令碼