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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM