`

oracle的number类型精度、刻度范围 [转]

阅读更多

一、 oracle number 类型精度、刻度范围

number(p,s)

p: 1---38
s: -84---127

有效数位 :从左边第一个不为 0 的数算起,到末位数字为止的所有数字,小数点和负号不计入有效位数。

p>0
,对 s 3 种情况:
1.s>0

精确到小数点右边 s 位,并四舍五入 。然后检验有效数位是否 <= p

ZWF.YUDONG>create table t_n(id number(5,2));
Table created.
  --
小数点前面最多只能有 3 位,小数点后面位数可以任意多

ZWF.YUDONG>insert into t_n values(123.45);
1 row created.

ZWF.YUDONG>insert into t_n values(123.455);
1 row created.


ZWF.YUDONG>insert into t_n values(12.345);
1 row created.

ZWF.YUDONG>insert into t_n values(1.234);
1 row created.

ZWF.YUDONG>insert into t_n values(.001);
1 row created.

ZWF.YUDONG>select * from t_n;
       ID
----------
  123.45
  123.46

12.35

1.23

0.00

5 rows selected.

ZWF.YUDONG>insert into t_n values(1234.5678);   --
有效位为 4 + 2 > 5
insert into t_n values(1234.5678)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(12345);   --
有效位为 5 + 2 > 5
insert into t_n values(12345)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column



如果 s > p ,小数点右边至少有 s - p 0 填充

ZWF.YUDONG>create table t_n(id number(4,5));
Table created.

ZWF.YUDONG>insert into t_n values(1);
insert into t_n values(1)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(.1);   -- 0.10000
,有效位为 5 > 4
insert into t_n values(.1)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(1.01 );   -- 1.01000
,有效位为 6 > 4
insert into t_n values(1.01)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


ZWF.YUDONG>insert into t_n values(.01);
1 row created.

ZWF.YUDONG>insert into t_n values(.001);
1 row created.
ZWF.YUDONG>insert into t_n values(.0001);
1 row created.

ZWF.YUDONG>insert into t_n values(.00001);
1 row created.

ZWF.YUDONG>insert into t_n values(.00000 6);
1 row created.

ZWF.YUDONG>insert into t_n values(.000000 1);   --
超过刻度存储 0
1 row created.

ZWF.YUDONG>select * from t_n;
       ID
-------------
   0.01000
   0.00100

   0.00010
  0.00001
   0.00001
    0.00000

6 rows selected.



2. s<0

精确到小数点左边 s 位,并四舍五入 。然后检验有效数位是否 <= p + |s|

ZWF.YUDONG>create table t_n(id number(5,-2));
Table created.

ZWF.YUDONG>insert into t_n values(123);
1 row created.

ZWF.YUDONG>insert into t_n values(1234);
1 row created.

ZWF.YUDONG>insert into t_n values(12345);
1 row created.

ZWF.YUDONG>insert into t_n values(123456);
1 row created.

ZWF.YUDONG>insert into t_n values(1234567);
1 row created.

ZWF.YUDONG>insert into t_n values(12 );
1 row created.

ZWF.YUDONG>insert into t_n values(1 );
1 row created.

ZWF.YUDONG>insert into t_n values(.1 );
1 row created.

ZWF.YUDONG>insert into t_n values(1234567.6789 );
1 row created.

ZWF.YUDONG>select * from t_n;
       ID
------------
     100 
     1200
      12300
  123500
  1234600
        0
        0
       0
  1234600

9 rows selected.

ZWF.YUDONG>insert into t_n values(12345678);
insert into t_n values(12345678)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column

3. s=0   
表示整数

number(p) 相当于 number(p,0) ,用于指定整数

number
:不指定 p s number ,用于表示浮点数,其 precision scale 都是 oracle 所能支持的最大值

总结:

p < s 这种情况下

1. 只能用来存放大于 0 小于 1 小数
2.
小数点后紧接着的 0 的数目至少有 s-p ,不然无法正常插入。
3. p
用来指定小数点之后的最大有效数字位数。当然不包括小数点后紧接着的 0 的个数。
4. s
是用来限制小数点后的数字位数【当然也就包括小数点后紧接的 0 】。

p > s 这种情况下

小数点前最多能插入: p - s 个数字,但是小数点后的数字可以任意长度

分享到:
评论

相关推荐

    sql mysql oracle数据类型

    1. **NUMBER**: 包含整数和实数,精度最高38位,刻度范围-84到127。如 `NUMBER(5,2)` 可存储-999.99到999.99的值。 2. **PLS_INTEGER** 和 **BINARY_INTEGER**: 两者都是整数类型,但BINARY_INTEGER在溢出时自动转为...

    oracle基本数据类型及用法

    - **NUMBER**: 最通用的数值类型,可以表示整数和浮点数,可以指定精度(总位数)和刻度(小数位数)。 - **INTEGER**: 实际上是NUMBER的一种特殊形式,用于整数,不需指定精度和刻度。 - **BINARY_INTEGER**: ...

    MySql Oracle SqlServer三大数据库的数据类型列表.pdf

    - NUMBER:可以存储整数或实数,精度可达38位,刻度范围可调。 - PLS_INTEGER 和 BINARY_INTEGER:仅用于整数,溢出处理方式不同。 - 字符:CHAR、VARCHAR2、LONG、NCHAR 和 NVARCHAR2。 - CHAR:定长字符串,...

    pls_interger 和binary_integer的区别与多种数据类型说明

    定义方式为 NUMBER(P,S),P 是精度,最大 38 位,S 是刻度范围, 可以在 -84...127 间取值。例如:NUMBER(5, 2) 可以用来存储 -999.99...999.99 间的数值。 * PLS_INTEGER:描述整数值,用于调用外部过程时的转换...

    Oracle表结构导出工具Excel.rar

    对于NUMBER,会显示精度和刻度。 5. **约束信息**:主键、外键、唯一性约束等,这些信息对于理解表间的关系至关重要。 6. **注释**:可能包含关于字段或表的描述信息,帮助理解数据含义。 通过这个工具,你可以方便...

    MySqlOracleSqlServer三大数据库的数据类型列表[借鉴].pdf

    NUMBER可定义精度(P)和刻度(S),如NUMBER(5,2)。 - 字符:CHAR、VARCHAR2、LONG、NCHAR和NVARCHAR2。CHAR是定长字符串,VARCHAR2是变长字符串,LONG用于长文本,N*类型用于支持Unicode字符。 - 日期:DATE类型...

    Oracle面试复习(二)

    - NUMBER可以存储整数和浮点数,允许指定精度和刻度。 - DATE类型用于存储日期和时间,包括年、月、日、小时、分钟和秒。 - BOOLEAN在Oracle中不直接支持,但可以通过CHAR或NUMBER模拟。 3. **表和索引**: - ...

    oracle_mysql系统移植方案[参照].pdf

    - **数值类型**:Oracle的NUMBER类型对应MySQL的DECIMAL,保持精度和刻度不变。如果涉及到序列,Oracle的序列在MySQL中可使用BIGINT代替。 - **字符串类型**:Oracle的VARCHAR2对应MySQL的VARCHAR,长度不变。...

    MySqlOracleSqlServer三大数据库的数据类型列表.pdf

    Oracle的`NUMBER`类型灵活性很高,可指定精度和刻度。例如,`NUMBER(5,2)`可以存储-999.99到999.99的值。`PLS_INTEGER`和`BINARY_INTEGER`在溢出时处理方式不同,`PLS_INTEGER`会引发错误,而`BINARY_INTEGER`会自动...

    ORACLE常用SQL命令.pdf

    Oracle允许指定精度和刻度,使得存储大整数或小数非常灵活。 3. **LONG**:用于存储变长字符数据,最大长度可达2GB。然而,由于其占用大量空间且处理效率较低,现在通常使用BLOB或CLOB替代。 4. **DATE**:日期型...

    Oracle的教程1

    `number`类型用于数值存储,可以指定精度和刻度。例如,`s number(3,2)`表示最多3位整数,其中2位是小数。 日期时间数据类型如`DATE`和`TIMESTAMP`用于存储日期和时间信息。`sysdate`函数返回当前系统日期和时间,`...

    oracle_mysql系统移植方案归类.pdf

    - 数值类型:Oracle的`NUMBER`对应MySQL的`DECIMAL`,保持精度和刻度不变。 - 字符串类型:Oracle的`VARCHAR2`对应MySQL的`VARCHAR`,长度不变。Oracle的`LONG`对应MySQL的`LONGTEXT`,但可能遇到主键长度问题,...

    Oracle企业资产管理.pptx

    * NUMBER(P,S):定义数字类型的数据,其中P是精度,表示数字的总位数,而S是刻度范围,表示小数点后的位数。 * DATE:定义日期时间数据,其长度为7个字节。 * RAW(N):定义二进制数据,其最大长度为2000字节。 * ...

    MySqlOracleSqlServer三大数据库的数据类型列表汇编.pdf

    Oracle 的 `NUMBER` 类型具有灵活性,可以通过指定精度和刻度来定义其大小。`VARCHAR2` 类型在多字节字符集环境下可以存储不同数量的字符,具体取决于字符集。 【SQL Server 数据类型】 SQL Server 的数据类型与 ...

    PLSQL培训文档.ppt

    Number 类型可以指定精度和刻度范围,例如 NUMBER(P,S),其中 P 是精度,S 是刻度范围。 4. 使用 %TYPE 和 %ROWTYPE %TYPE 可以将变量类型定义为与数据库中表的字段相同的类型,当字段的数据类型变化时则变量的...

    MySqlOracleSqlServer三大数据库的数据类型列表.docx

    - `NUMBER` 可以存储整数或浮点数,具有可变精度和刻度。 - `PLS_INTEGER` 和 `BINARY_INTEGER` 仅用于整数,适用于内存储算。 - 字符类型:`CHAR`, `VARCHAR2`, `LONG`, `NCHAR`, `NVARCHAR2` - `CHAR` 是定长...

    MySqlOracleSqlServer三大数据库的数据类型列表参考.pdf

    2. **NUMBER**:可存储整数或实数,精度可达38位,刻度范围在-84到127之间,灵活性高。 3. **PLS_INTEGER** 和 **BINARY_INTEGER**:整数类型,前者溢出时出错,后者溢出时转为NUMBER类型。 4. **CHAR**:定长字符串...

    Oracle SQL.doc

    - **NUMBER(p,s)**:数值类型,p为精度,s为刻度,用于控制小数位数。 - **VARCHAR2(s)**:变长字符类型,最大长度为4000个字符。 - **CHAR(s)**:定长字符类型,最大长度为2000个字符。在存储时,不足长度的会用...

Global site tag (gtag.js) - Google Analytics