1>.NUMBER類型細講:
Oracle number datatype 文法:NUMBER[(precision [, scale])]
簡稱:precision --> p
scale --> s
NUMBER(p, s)
範圍: 1 <= p <=38, -84 <= s <= 127
儲存資料範圍:-1.0e-130 <= number value < 1.0e+126
儲存在機器內部的範圍: 1 ~ 22 bytes
有效為:從左邊第一個不為0的數算起的位元。
s的情況:
s > 0
精確到小數點右邊s位,並四捨五入。然後檢驗有效位是否 <= p。
s < 0
精確到小數點左邊s位,並四捨五入。然後檢驗有效位是否 <= p + |s|。
s = 0
此時NUMBER表示整數。
eg:
Actual Data Specified As Stored As
----------------------------------------
123.89 NUMBER 123.89
123.89 NUMBER(3) 124
123.89 NUMBER(6,2) 123.89
123.89 NUMBER(6,1) 123.9
123.89 NUMBER(4,2) exceeds precision (有效位為5, 5 > 4)
123.89 NUMBER(6,-2) 100
.01234 NUMBER(4,5) .01234 (有效位為4)
.00012 NUMBER(4,5) .00012
.000127 NUMBER(4,5) .00013
.0000012 NUMBER(2,7) .0000012
.00000123 NUMBER(2,7) .0000012
1.2e-4 NUMBER(2,5) 0.00012
1.2e-5 NUMBER(2,5) 0.00001
123.2564 NUMBER 123.2564
1234.9876 NUMBER(6,2) 1234.99
12345.12345 NUMBER(6,2) Error (有效位為5+2 > 6)
1234.9876 NUMBER(6) 1235 (s沒有表示s=0)
12345.345 NUMBER(5,-2) 12300
1234567 NUMBER(5,-2) 1234600
12345678 NUMBER(5,-2) Error (有效位為8 > 7)
123456789 NUMBER(5,-4) 123460000
1234567890 NUMBER(5,-4) Error (有效位為10 > 9)
12345.58 NUMBER(*, 1) 12345.6
0.1 NUMBER(4,5) Error (0.10000, 有效位為5 > 4)
0.01234567 NUMBER(4,5) 0.01235
0.09999 NUMBER(4,5) 0.09999
建立自增列的SQL,先建立序列
CREATE SEQUENCE "ROLEIDSEQ" MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE NOORDER NOCYCLE
Code
CREATE TABLE "ROLE"
( "ID" NUMBER(9,0) NOT NULL ENABLE,
"NAME" VARCHAR2(20),
"DESCRIPTION" VARCHAR2(64),
CONSTRAINT "ROLE_PK" PRIMARY KEY ("ID") ENABLE
)
/
CREATE OR REPLACE TRIGGER "BI_ROLE"
before insert on "ROLE"
for each row
begin
select "ROLEIDSEQ".nextval into :NEW.ID from dual;
end;
/
ALTER TRIGGER "BI_ROLE" ENABLE
/