1. 程式人生 > >oracle中序列的使用

oracle中序列的使用

oracle序列 插入 回滾 自動 p s 無需 _id 開始 value

序列: 是oacle提供的用於產生一系列唯一數字的數據庫對象。

l 自動提供唯一的數值

l 共享對象

l 主要用於提供主鍵值

l 將序列值裝入內存可以提高訪問效率

創建序列:

1、 要有創建序列的權限 create sequence 或 create any sequence

2、 創建序列的語法

CREATE SEQUENCE sequence //創建序列名稱

[INCREMENT BY n] //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1

[START WITH n] //開始的值,遞增默認是minvalue 遞減是maxvalue

[{MAXVALUE n | NOMAXVALUE}] //最大值

[{MINVALUE n | NOMINVALUE}] //最小值

[{CYCLE | NOCYCLE}] //循環/不循環

[{CACHE n | NOCACHE}];//分配並存入到內存中

NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用

CURRVAL 中存放序列的當前值

NEXTVAL 應在 CURRVAL 之前指定 ,二者應同時有效

Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1

Cycle cache 2;

//先nextval 後 currval

Select seqEmp.nextval from dual;

Select seqEmp.currval from dual;

Cache<max-min/increment

//解釋

{

Create 創建

Sequence 序列 seqEmop 序列名稱

Increment by 步長

Stat with 1 開始值

Maxvalue 最大值

Minvalue 最小值

Cycle 循環 nocycle 不循環

Cache 緩存 Cache<maxvalue-minvalue/increment by//一般不采用緩存

Nextvalue 下一個

Currval 當前值

}

//實例應用

//1.實現id的自動遞增

//第一步

create table cdpt(

id number(6),

name varchar2(30),

constraint pk_id primary key(id)

);

Create sequence seq_cdpt

Increment by 1

Start with 1

Maxvalue 999999

Minvalue 1

Nocycle

nocache

----------------------------------------------------------------------------------

該部分為擴展部分,僅供參考

2.刪除Oracle序列的語法是DROP SEQUENCE 序列名;

假設有表TEST,其主鍵為TEST_ID
1)建立遞增序列SEQ_TEST:
create sequence SEQ_TEST
increment by 1
start with 1
minvalue 1 nomaxvalue
nocycle

2)建立觸發器,當有數據插入表TEST時,使用Oracle序列為其去的遞增的主鍵值
create trigger TRG_TEST before insert on TEST
for each row
begin
select SEQ_TEST.nextval into :new.TEST_ID from dual;
end;

至此,創建完成!

當然也可以不使用觸發器,而是在插入時在sql語句中調用序列,例如
insert into TEST values(SEQ_TEST.nextval, ……)

---------------------------------------------------------------------------------------------

insert into cdpt values(seq_cdpt.nextval,’feffefe’);

commit;

select * from cdpt;

/使用序列

會產生裂縫

l 序列在下列情況下出現裂縫:

? 回滾

? 系統異常

>多個表同時使用同一序列

//修改序列的增量, 最大值, 最小值, 循環選項, 或是否裝入內存

alter SEQUENCE sequence //創建序列名稱

[INCREMENT BY n] //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1

[START WITH n] //開始的值,遞增默認是minvalue 遞減是maxvalue

[{MAXVALUE n | NOMAXVALUE}] //最大值

[{MINVALUE n | NOMINVALUE}] //最小值

[{CYCLE | NOCYCLE}] //循環/不循環

[{CACHE n | NOCACHE}];//分配並存入到內存中

修改序列的註意事項:

l 必須是序列的擁有者或對序列有 ALTER 權限

l 只有將來的序列值會被改變

l 改變序列的初始值只能通過刪除序列之後重建序列的方法實現

刪除序列

l 使用DROP SEQUENCE 語句刪除序列

l 刪除之後,序列不能再次被引用

Alter sequence seqEmp maxvalue 5;

Select seqEmp.nextval from dual;

引用原文:http://www.cnblogs.com/warrior4236/p/5866214.html

寫博客是為了記住自己容易忘記的東西,另外也是對自己工作的總結,文章可以轉載,無需版權。希望盡自己的努力,做到更好,大家一起努力進步!

如果有什麽問題,歡迎大家一起探討,代碼如有問題,歡迎各位大神指正!

oracle中序列的使用