oracle序列操作

2021-09-12 07:38:13 字數 1914 閱讀 3952

序列的主要作用:

在很多資料庫裡都存在自動增長列的資料型別,幾乎所有的關係型資料庫都支援自動增長列的操作,但是只有oracle特殊,只有oracle 12c版本之後才提供自動增長列,在此之前都是用序列的方式來處理。

序列的建立語法:

create sequence 序列名

[increment_by 步長][start with 開始值]

[maxvalue 最大值|nomaxvalue]

[minvalue 最小值|nominvalue]

[cycle|nocycle]

[cache 快取資料 |nocache]

大部分情況下,我們都只會建立預設序列,預設序列指最小值為1,沒有最大值,開始值為0,並且設有20個快取資料。

通常情況下我們只需要執行就可以:create sequence 序列名

建立完序列後,其內容一定會儲存在資料字典中,「user_sequences」

查詢資料字典之後會發現其中字段:

sequence_name 序列名

minvalue 最小值

maxvalue最大值

increment_by 步長(每次增長多少)

cy 是否迴圈

cache_size 快取資料

last_number 最後一次內容值為多少

序列的使用:

對於序列可以採用兩個偽列來使用:

序列物件.nextval:表示進行序列的增長,每呼叫一次,序列加上指定的步長

序列物件.currval:表示取得當前序列內容,不管如何呼叫,序列內容不發生改變

序列成功建立之後,嚴格來講序列還無法直接執行currval,必須先執行nextval 。

而對於快取資料:

我們說如果如果系統提供了快取概念,基本上是用來提公升程式效能的。

通俗來說,快取就是,比方說乙個人賣包子,有人來買,如果沒有快取的話,那這個人就要先去買材料,回來處理餡,做夠買家需要的包子。然後又有人來買,他還需要再去市場買材料,然後做包子,,這樣的話效率太低。如果有快取的話,就相當於這個人一次性做了足夠多的包子,有人來買的時候直接給他。這樣效率就很快了。

但是這樣方便的同時,也有一些小問題,就是,做夠了包子沒有人過買,導致資源浪費,容易會發生跳號的問題。

如果序列想要為表中某個字段完成自動增長列的功能,只能通過insert完成,不能寫在資料庫的建立指令碼裡

使用方法舉例:

--刪除表

drop table ces purge;

--建立表

create table ces (

id number,

name varchar2(20),

constraint pk_id primary key (id)

);--在插入語句中引用序列

insert into ces(id,name) values(myxul.nextval,'張三');

由於此時在乙個session下進行,序列號是正常的,如果在多個session下,可能會出現序列號變化的情況,不用去管;

注:在設定迴圈序列的時候要注意快取資料;

修改序列:

create sequence 序列名

increment by 2(修改序列步長為2)

start with 10(修改序列開始值為10)

刪除序列:

drop sequence 序列名;

ORACLE序列操作

建立序列 create sequence tempinfo seq increment by 1 每次加幾個 start with 1 從1開始計數 nomaxvalue 不設定最大值 nocycle 一直累加,不迴圈 cache 10 設定快取cache個序列,如果系統down掉了或者其它情況將會...

oracle對序列的操作

select t.t.rowid from tbl type t order by t.id desc select seq tbl type id.nextval from dual alter sequence seq tbl type id increment by 200 alter seq...

Oracle中序列的操作以及使用前對序列的初始化

一 建立序列 create sequence myseq start with 1 increment by 1 nomaxvalue minvalue 1 二 初始化序列 select myseq.nextval from dual 這裡值得注意的是,如果先直接寫select myseq.curr...