• oracle 修改数据精度问题


    今天,在建表后插入语句时,报了这样的错误,对于这样的错误,搜集了一些资料,进行了总结如下: 建表语句:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    create table pre_info(
    pre_code varchar2(20) not null,
    pre_name varchar2(20),
    pre_num number(5),
    pre_price_old number(5),pre_tax decimal(1,3),pre_price_net number(5,2),
    pre_dep varchar2(20),pre_starttime_plan date,pre_overtime_plan date,
    pre_starttime_actu date,pre_overtime_actu date,pre_overtime_cust varchar2(20),
    pre_overtime_blo varchar2(1),pre_month varchar2(2),primary key(pre_code)
    );
    1
    insert into pre_info values('2204','葡萄',100,280,1.32,180,'贸易','2017/11/28','2017/11/29','2017/11/29','2017/11/30','038765','0','11');

    插入时报了如下错误:

    这里写图片描述

    改错后,小小总结如下:

    (1) 在DECIMAL(a,b)的设置中,整数的位数不能大于(a-b),但小数位可以大于b,但会从大于b的有效位开始截断。

    (2)Number(p, s) , 声明一个定点数 时, p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38;Number(p)声明一个整数相当于Number(p, 0);Number 声明一个浮点数,其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。定点数的精度(p)和刻度(s)遵循以下规则:

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

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

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

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

    总之,还有一些细节的东西需要注意,需要多总结。

  • 相关阅读:
    js——获取指定日期的前7天连续日期
    一个div自动充满当前屏幕的解决方法
    Cookie和Session
    Web服务器和浏览器间的工作原理
    软件测试基础概念
    K短路的几种求法
    ID字体
    搭建GitLab的Hexo博客记录
    项目selfcmp开发学习
    牛顿迭代法学习笔记
  • 原文地址:https://www.cnblogs.com/UUUz/p/9342731.html
Copyright © 2020-2023  润新知