Oracle NUMBER 資料類型是數值儲存的核心,語法為 NUMBER[(precision [, scale])],簡稱 p(精度)與 s(標度)。本文系統整理其規則、範圍與實際範例。
| s 值 | 行為 | 有效位檢核 |
|---|---|---|
| s > 0 | 精確到小數點右邊 s 位,四捨五入 | 有效位 ≤ p |
| s < 0 | 精確到小數點左邊 |s| 位,四捨五入 | 有效位 ≤ p + |s| |
| s = 0 | 視為整數 | 有效位 ≤ p |
| 實際資料 | 定義 | 儲存結果 | 說明 |
|---|---|---|---|
| 123.89 | NUMBER | 123.89 | 預設全精度 |
| 123.89 | NUMBER(3) | 124 | p=3, s=0,四捨五入 |
| 123.89 | NUMBER(6,2) | 123.89 | 符合精度 |
| 123.89 | NUMBER(6,1) | 123.9 | 小數 1 位 |
| 123.89 | NUMBER(4,2) | 錯誤 | 有效位 5 > p=4 |
| 123.89 | NUMBER(6,-2) | 100 | 百位四捨五入 |
| .01234 | NUMBER(4,5) | .01234 | 有效位 4 |
| .000127 | NUMBER(4,5) | .00013 | 四捨五入 |
| 1.2e-4 | NUMBER(2,5) | 0.00012 | 科學標記法 |
| 1234.9876 | NUMBER(6,2) | 1234.99 | |
| 12345.12345 | NUMBER(6,2) | 錯誤 | 有效位 7 > 6 |
| 12345.345 | NUMBER(5,-2) | 12300 | 百位 |
| 1234567 | NUMBER(5,-2) | 1234600 | |
| 12345678 | NUMBER(5,-2) | 錯誤 | 有效位 8 > 7 |
| 0.1 | NUMBER(4,5) | 錯誤 | 0.10000 有效位 5 > 4 |
| 0.09999 | NUMBER(4,5) | 0.09999 | 符合 |
NUMBER(*) 等同無精度限制,但 NUMBER(*,1) 仍受標度約束ORA-01438 錯誤掌握 NUMBER(p,s) 規則,能避免資料截斷、溢位與效能浪費,是資料庫設計必備功力。