Oracle number資料型別

2021-08-08 13:41:44 字數 3148 閱讀 3955

number ( precision, scale)

precision表示數字中的有效位;如果沒有指定precision的話,oracle將使用38作為精度。如果scale大於零,表示數字精確到小數點右邊的位數;scale預設設定為0;如果scale小於零,oracle將把該數字取捨到小數點左邊的指定位數。precision的取值範圍為【1---38】;scale的取值範圍為【-84---127】。number整數部分允許的長度為(precision- scale),無論scale是正數還是負數。如果precision小於scale,表示儲存的是沒有整數的小數。precision表示有效位數,有效數字:從左邊第乙個不為0的數算起,小數點和負號不計入有效位數;scale表示精確到多少位,指精確到小數點左邊或右邊多少位(+-決定)。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的整數。

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 by1

--每次加幾個

start

with1--

從1開始計數

nomaxvalue

--不設定最大值

nocycle

--一直累加,不迴圈

nocache

--不建緩衝區

再建立乙個觸發器:

create

orreplace

trigger

example_t

before

insert

onexample

foreach 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

結果是:

idname1張三

111李四

Oracle NUMBER資料型別

在oracle中number型別可以用來儲存0,正負定點或者浮點數,可表示的資料範圍在 1.0 10 130 9.9.9 10 125 的數字,當oracle中的數學表示式的值 1.0 10 126 時,oracle就會報錯。number的資料宣告如下 表示 作用 說明 number p,s 宣告乙...

ORACLE NUMBER丟失精度

oracle的number可以支援到38位精度。超過15位存進去,就用科學記數法表示的,而且精度丟失了。例 1234567890123456 插入後 1.23456789012346e15 123456789025587.22 插入後 123456789025587.00 補足 此處的精度丟失是,s...

Oracle NUMBER型別研究

oracle提供了強大的資料型別number,他的格式為oracle number datatype 語法 number precision scale 其中簡稱 precision p scale s number p,s 範圍 1 p 38,84 s 127 儲存資料範圍 1.0e 130 nu...