以下的文章主要介紹的是Oracle序列與觸發器的使用方案,在正題開始之前,我們要先加一些關於Oracle clIEnt sqlplus的具體使用,就是說假如你執行多行語句的話時一定要加“/”才能表示結束,並執行!!
本次的目的是通過創建Oracle序列和觸發器實現表的主鍵自增。
首先創建Oracle序列,序列的語法格式為:
CREATE SEQUENCE 序列名
- [INCREMENT BY n]
- [START WITH n]
- [{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
- [{CYCLE|NOCYCLE}]
- [{CACHE n|NOCACHE}];
INCREMENT BY 用於定義序列的步長,如果省略,則默認為1,如果出現負值,則代表序列的值是按照此步長遞減的。
START WITH 定義Oracle序列的初始值(即產生的第一個值),默認為1。
MAXVALUE 定義序列生成器能產生的最大值。選項NOMAXVALUE是默認選項,代表沒有最大值定義,這時對於遞增序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。
MINVALUE定義序列生成器能產生的最小值。選項NOMAXVALUE是默認選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是?10的26次方;對於遞增序列,最小值是1。
CYCLE和NOCYCLE 表示當序列生成器的值達到限制值後是否循環。CYCLE代表循環,NOCYCLE代表不循環。如果循環,則當遞增序列達到最大值時,循環到最小值;對於遞減序列達到最小值時,循環到最大值。如果不循環,達到限制值後,繼續產生新值就會發生錯誤。
CACHE(緩沖)定義存放序列的內存塊的大小,默認為20。NOCACHE表示不對序列進行內存緩沖。對序列進行內存緩沖,可以改善序列的性能。
刪除序列的語法是DROP SEQUENCE 序列名;
假設有表TEST,其主鍵為TEST_ID,首先建立遞增Oracle序列SEQ_TEST:
- create sequence SEQ_TEST
- increment by 1
- start with 1
- minvalue 1 nomaxvalue
- nocylce
然後建立觸發器,當有數據插入表TEST時,使用序列為其去的遞增的主鍵值
- create trigger TRG_TEST before insert on TEST
- for each row
- begin
- select SEQ_TEST.nextval into :new.TEST_ID from dual;
- end;
至此,創建完成!
當然也可以不使用觸發器,而是在插入時在sql語句中調用Oracle序列,例如
- insert into TEST values(SEQ_TEST.nextval, ……) ;
以上的相關內容就是對Oracle序列和觸發器的使用的介紹,望你能有所收獲。