oracle之序列

liqilin0429發表於2012-02-22
CREATE SEQUENCE test
    INCREMENT BY 1
    START WITH 100
    MAXVALUE 99999999
    NOMINVALUE
    NOCYCLE
    NOCACHE
    NOORDER

1)INCREMENT BY用於定義序列的步長,如果省略,則預設為1,如果出現負值,則代表Oracle序列的值是按照此步長遞減的。
2)START WITH 定義序列的初始值(即產生的第一個值),預設為1。
3)MAXVALUE 定義序列生成器能產生的最大值。選項NOMAXVALUE是預設選項,代表沒有最大值定義,這時對於遞增Oracle序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。
4)MINVALUE定義序列生成器能產生的最小值。選項NOMAXVALUE是預設選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是?10的26次方;對於遞增序列,最小值是1。
5)CYCLE和NOCYCLE 表示當序列生成器的值達到限制值後是否迴圈。
CYCLE代表迴圈,NOCYCLE代表不迴圈。
如果迴圈,則當遞增序列達到最大值時,迴圈到最小值;對於遞減序列達到最小值時,迴圈到最大值。
如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。
6)CACHE(緩衝)定義存放序列的記憶體塊的大小,預設為20。NOCACHE表示不對序列進行記憶體緩衝。對序列進行記憶體緩衝,可以改善序列的效能。
第一步 建立序列
create sequence sql_nocy
increment by 1
start with 100
minvalue 100
maxvalue 110
nocycle;
select  sql_nocy.nextVal ,  sql_nocy.currval from dual
 
第二步 建立表
create table test_tab(
name varchar2(20),
id number);
第三步 插入資料
通過觸發器
create trigger TRG_TEST before insert on TEST
for each row
begin
select sql_nocy.nextval into :new.TEST_ID from dual;
end;
直接插入
insert into test_tab values('qilin',sql_nocy.nextal);
SQL> insert into test_tab values('qilin',55);
已建立 1 行。
SQL> insert into test_tab values('qilin',35);
已建立 1 行。
SQL> insert into test_tab values('qilin',45);
已建立 1 行。
SQL> insert into test_tab values('qilin',sql_nocy.nextval);
第四步 查詢
SQL> select * from test_tab;
NAME                         ID
-------------------- ----------
qilin                       101
qilin                        55
qilin                        35
qilin                        45
qilin                       102
第五步 再次建立迴圈的序列
create sequence sql_cy
increment by 1
start with 100
minvalue 100
maxvalue 110
NOCACHE
cycle;
第六步 查詢顯示結果
SQL> desc v$pwfile_users;
SQL> desc dba_sys_privs;
SQL> desc dba_roles;
SQL> desc role_sys_privs;
 
 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20976446/viewspace-716913/,如需轉載,請註明出處,否則將追究法律責任。

相關文章