今天,在建表后插入語句時,報了這樣的錯誤,對於這樣的錯誤,搜集了一些資料,進行了總結如下: 建表語句:
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位向右的數字被舍入
總之,還有一些細節的東西需要注意,需要多總結。