1. 程式人生 > >如何在Oracle中設定自增長欄位

如何在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