zoukankan      html  css  js  c++  java
  • Oracle---number数据类型

    https://www.cnblogs.com/oumyye/p/4448656.html

    NUMBER ( precision, scale)

    1.  precision表示数字中的有效位;如果没有指定precision的话,Oracle将使用38作为精度。
    2.  如果scale大于零,表示数字精确到小数点右边的位数;scale默认设置为0;如果scale小于零,Oracle将把该数字取舍到小数点左边的指定位数。
    3.  Precision的取值范围为【1---38】;Scale的取值范围为【-84---127】。
    4.  NUMBER整数部分允许的长度为(precision- scale),无论scale是正数还是负数。
    5.  如果precision小于scale,表示存储的是没有整数的小数。
    6.  Precision表示有效位数,有效数位:从左边第一个不为0的数算起,小数点和负号不计入有效位数;scale表示精确到多少位,指精确到小数点左边或右边多少位(+-决定)
    7.  Number值类型举例:

    实际值

    数据类型

    存储值

    1234567.89

    Number

    1234567.89

    1234567.89

    Number(8)

    1234567

    1234567.89

    Number(6)

    出错

    1234567.89

    Number(9,1)

    1234567.9

    1234567.89

    Number(9,3)

    出错

    1234567.89

    Number(7,2)

    出错

    1234567.89

    Number(5,-2)

    1234600

    1234511.89

    Number(5,-2)

    1234500

    1234567.89

    Number(5,-4)

    1230000

    1234567.89

    Number(*,1)

    1234567.9

    0.012

    Number(2,3)

    0.012

    0.23

    Number(2,3)

    出错

    8.  关于precision, scale也可以作如下表述

    定点数的精度(p)和刻度(s)遵循以下规则:

    1)  当一个数的整数部分的长度 > p-s 时,Oracle就会报错

    2)  当一个数的小数部分的长度 > s 时,Oracle就会舍入。

    3)  当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。

    4)  当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入

    与int的区别

    oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。
    int类型只能存储整数;
    number可以存储浮点数,也可以存储整数;
    number(8,1)存储小数位为1位,总长度为8的浮点数,如果小数位数不足,则用0补全;
    number(8)存储总长度为8的整数;
    int相当于number(22),存储总长度为22的整数。

    NUMBER类型的子类

    a)  oracle本来就没有int类型,为了与别的数据库兼容,新增了int类型作为number类型的子集。

    b)  int类型只能存储整数;number可以存储浮点数,也可以存储整数。

    c)  在oracle数据库建表的时候,decimal,numeric不带精度,oracle会自动把它处理成INTEGER;带精度,oracle会自动把它处理成number。

    d)  Oracle只用NUMBER(m,n)就可以表示任何复杂的数字数据。

    e)  decimal,numeric,int等都为SQL、DB2等数据库的数据类型,ORACLE为了兼容才将其引入;但实际上在ORACLE内部还是以NUMBER的形式将其存入。

    number自增

    不同于mysql可以直接设置自增,需要建立序列,和触发器。例:

    首先,创建一张表:

    CREATE TABLE example(
    
    ID Number(4) NOT NULL PRIMARY KEY,
    
    NAME VARCHAR(25));

    后,自定义一个序列(sequence):

    复制代码
    CREATE SEQUENCE example_sequence
    
    INCREMENT BY 1 -- 每次加几个
    
    START WITH 1 -- 从1开始计数
    
    NOMAXVALUE -- 不设置最大值
    
    NOCYCLE -- 一直累加,不循环
    
    NOCACHE -- 不建缓冲区
    复制代码

    再创建一个触发器:

    CREATE OR REPLACE TRIGGER example_t
    BEFORE INSERT ON example
    FOR EACH ROW
    BEGIN
    SELECT example_sequence.nextval INTO :new.id FROM dual; 
    END;

    测试一下,插入数据

    insert into example(name) values('张三');
    
    insert into example(id, name) values(111,'李四');

    输入查询语句:

    select t.* from EXAMPLE t

    结果是:

    id name
    1 张三
    111 李四
  • 相关阅读:
    OSG-提示“error reading file e:1.jpg file not handled”
    OSG-加载地球文件报0x00000005错误,提示error reading file simple.earth file not handled
    QT-找开工程后,最上方提示the code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.
    我的书《Unity3D动作游戏开发实战》出版了
    java中无符号类型的第三方库jOOU
    Windows批处理备份mysql数据
    使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A
    Java版本,Java版本MongoDB驱动,驱动与MongoDB数据库,Spring之间的兼容性
    Jrebel本地激活方法
    wget下载指定网站目录下的所有内容
  • 原文地址:https://www.cnblogs.com/jiangfeilong/p/10923899.html
Copyright © 2011-2022 走看看