oracle設置自動增長序列
我們在用MS SQL Server時,可以為表的主鍵設置為自動加1的效果;但是在Oracle當中,我們是無法直接設置一個字段為自動加1,需要先建立一個Sequence,然後為這個表創建一個Trigger,具體步驟如下:
1.先建立一個Order表格,用如下SQL語句
create table SCOTT.ORDER
(
ID NUMBER(10) not null,
BUYER CHAR(20) not null,
MERCHANDISE VARCHAR2(50) not null,
QUANTITY LONG not null,
UNITPRICE NUMBER(10,2) not null,
TOTALPRICE NUMBER(20,4),
DESCRIPTION NVARCHAR2(1000),
PRIMARY KEY("ID")
)
2.創建一個序列,從10000開始計數,增量為1
create sequence ORDER_ID
minvalue 1
maxvalue 9999999999999999999999999999
start with 10000 --從10000開始生成序列
increment by 1 --增量為1
cache 20; --預存20個序列值在內存中,這樣可以提高訪問序列的速度
3.為Order表創建一個before insert的觸發器,在插入之前將表order的主鍵設置為上面的序列值.
CREATE OR REPLACE TRIGGER "ORDER_ID_GENERATOR" BEFORE
INSERT ON "SCOTT"."ORDER" FOR EACH ROW --一定要加上For each row,表示該觸發器適應於每一條記錄
declare
mid number;
begin
select order_id.nextval into mid from dual; --order_id.nextval是獲得上面定義的序列ORDER_ID的下一個值
:new.id:=mid; --將得到的序列值賦給表order的主鍵id, 可以用":new"引用將要插入的一行數據
end;
這樣,當執行插入記錄的時候,可以這樣寫
insert into order(buyer,merchandise,quantity,unitprice)values("ABC","Product_ABC",200,10);
Oracle會調用上面創建的觸發器將序列值賦值給主鍵ID
oracle設置自動增長序列