oracle 序列的創建與使用 (2012-03-15 16:14:09) 轉載 oracle 序列的創建與使用 轉載 在Oracle中,可以使用序列自動生成一個整數序列,主要用來自動為表中的數據類型的主鍵列提供有序的唯一值,這樣就可以避免在向表中添加數據時,手工指定主鍵值。而且使用手工指定主鍵值這 ...
oracle 序列的創建與使用
(2012-03-15 16:14:09) ---------------------------------------------------------------------------------------------------轉載-------------------------------------------------------------------------------------------------------------------在Oracle中,可以使用序列自動生成一個整數序列,主要用來自動為表中的數據類型的主鍵列提供有序的唯一值,這樣就可以避免在向表中添加數據時,手工指定主鍵值。而且使用手工指定主鍵值這種方式時,由於主鍵值不允許重覆,因此它要求操作人員在指定主鍵值時自己判斷新添加的值是否已經存在,這很顯然是不可取的。
(1)創建序列
序列與視圖一樣,並不占用實際的存儲空間,只是在數據字典中保存它的定義信息。創建序列需要使用CREATE SEQUENCE語句,其語法如下:
CREATE SEQUENCE [schema]。sequence_name --序列名
[ START WITH start_number ] --開始數字
[ INCREMENT BY increment_number ] --每次加幾
[ MINVALUE minvalue | NOMINVALUE ] --最小值
[ MAXVALUE maxvalue | NOMAXVALUE ] --最大值
[ CACHE cache_number | NOCACHE ]
[ CYCLE | NOCYCLE ] --是否迴圈
[ ORDER | NOORDER ];
註意:cache參數指定記憶體預分配的序列數的個數,預設20個,為了加快訪問速度。
order參數指定是否按照請求次序生成序列號,一般使用序列生成主鍵值時,影響不大。
(2)序列中的兩個偽列
Currval:用於獲取序列的當前值,必須再使用nextval一次之後才能使用。 —nextval:用於獲取序列的下一個值,第一次使用返回的是初始值,向表中的主鍵賦值的時候使用此偽列。 (3)序列舉例- 首先創建student表:
- 創建student_seq序列
create sequence student_seq
start with 1
increment by 1
nocache nocycle order;
- 創建觸發器(使用student_seq序列)
create trigger tr_student
before insert on student
for each row
begin
select student_seq into :new.sid from dual;
end;
- 插入數據:
SQL> insert into student(sname) values('zhang')
已創建 1 行。
SQL> insert into student(sname) values('li');
已創建 1 行。
SQL> insert into student(sname) values('wang')
已創建 1 行。
- 查詢數據:
- SQL> select * from student;
- SID SNAME
---------- --------
1 zhang
2 li
3 wang