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位向右的數字被舍入

總之,還有一些細節的東西需要注意,需要多總結。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM