Oracle資料庫開發——序列

呆呆笨笨的魚發表於2014-04-22

序列是Oracle資料庫中一個生成整數序號的模式物件。由序列產生的一組整數可以用作表的主鍵值,這個在資料庫開過程中經常用到。

序列的建立語句和選項:
create sequence [schema].sequence_name
[increment by {1|n}]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue]
[cycle | nocycle]
[cache n | nocache]
[order | noorder];
其中:
increment by 指定序列增長的步長,預設為1。如果n是負值,則代表序列值遞減。
start with 起始值,預設為1
maxvalue 指定序列最大值。nomaxvalue是預設選項,表示沒有最大值。
minvalue 指定序列最小值。nominvalue是預設選項,表示沒有最小值。
cycle | nocycle 指定序列在達到最大值或最小值後是否迴圈。
cache | nocache 指定資料庫是否在記憶體中預分配一定數量的序列值進行快取,預分配序列值可以加快訪問速度,提高效能;
               引數n的值最小是2,預設值是20;
               對於迴圈序列,快取的序列值數量一定要小於該序列迴圈的值數量,可快取的序列值個數最多為:
                cell(maxvalue - minvalue)/ ABS(increment)
               
例:
建立序列
SQL> create sequence emp_seq
  2  start with 1000
  3  increment by 1
  4  minvalue 1
  5  maxvalue 10000
  6  nocycle
  7  cache 5;
  
Sequence created  

使用序列:序列建立後有兩個屬性——currval和nextval來引用序列的值,分別來獲取當前值和下一個值。

SQL> select emp_seq.nextval from dual;
 
   NEXTVAL
----------
      1000
 
SQL> select emp_seq.currval from dual;
 
   CURRVAL
----------
      1000  
      
序列常用於保證主鍵不重複

SQL> create table emp_test
  2  (emp_id number(6) primary key
  3  ,ename varchar2(10)
  4  );
  
Table created
 
SQL> insert into emp_test values(emp_seq.nextval,'aaa');
 
1 row inserted
 
SQL> insert into emp_test values(emp_seq.nextval,'bbb');
 
1 row inserted
 
SQL> select * from emp_test;
 
 EMP_ID ENAME
------- ----------
   1002 aaa
   1003 bbb

修改序列:alter sequence emp_seq incrementby 10;

注意:序列修改不能修改起始值!
SQL> alter sequence emp_seq start with 100;
 
alter sequence emp_seq start with 100
 
ORA-02283: 無法變更啟動序列號

刪除序列:dorp sequence emp_seq;

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

相關文章