日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解Oracle數(shù)據(jù)庫對象:序列相關(guān)操作

序列是一種數(shù)據(jù)庫對象,用來自動產(chǎn)生一組唯一的序號。

成都創(chuàng)新互聯(lián)服務(wù)項目包括寶塔網(wǎng)站建設(shè)、寶塔網(wǎng)站制作、寶塔網(wǎng)頁制作以及寶塔網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,寶塔網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到寶塔省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

序列是一種共享式的對象,多個用戶可以共同使用序列中的序號。 一般將序列應(yīng)用于表的主鍵列,這樣當向表中插入數(shù)據(jù)時,主鍵列就使用了序列中的序號,從而保證主鍵列的值不會重復。 用這種方式可以代替在應(yīng)用程序中產(chǎn)生主鍵值的方法,可以獲得更可靠的主鍵值。 注:在序列指定最大值和可循環(huán)屬性后,序列中的序號是可以循環(huán)使用的。

序列的創(chuàng)建、修改和刪除

默認情況下,用戶可以在自己的模式中創(chuàng)建序列。如果希望在其他用戶的模式中創(chuàng)建序列, 則必須具有CREATE ANY SEQUENCE這個系統(tǒng)權(quán)限。

創(chuàng)建序列的命令為CREATE SEQUENCE,它的完整語法格式為:

CREATE SEQUENCE 序列名

INCREMENT BY n

START WITH n

MINVALUE n | NOMINVALUE

MAXVALUE n | NOMAXVALUE

CYCLE | NOCYCLE

CACHE | NOCACHE

ORDER | NOORDER

在這個命令的語法格式中,除序列名以外,其余各選項都是可選的。

各選項中的n是一個整數(shù)。

其中START WITH選項指定序列中的序號從哪個數(shù)字開始,默認情況下從它的最小值開始。 INCREMENT BY選項指定了序列中序號遞增的幅度,也就是后一個序號比前一個序號大多少。 序號可以遞增,也可以遞減,所以INCREMENT BY選項中的數(shù)字n可以是正整數(shù),也可以是負整數(shù)。 MAXVALUE用來指定序列中序號的最大值。

如果沒有最大值,可用NOMAXVALUE選項代替這個選項。 同樣, MINVALUE用來指定序列中序號的最小值,序列中的最小值必須小于或等于它的開始值。 如果為序列指定了最大值,那么當序列中的序號被悄耗完時,用戶將無法從這個序列中取得序號。 選項CYCLE使得序列中的序號可以循環(huán)使用。

當用戶正在使用序列中的最大值時,下一個可以使用的序號就是它的最小值。 用戶每使用序列一次,都要對序列進行一次查詢。

如果把序列中的序號放在內(nèi)存中進行緩沖,那么用戶獲得序號的速度將大大加快。 選項CACHE的作用就是將序列中接下來的n個序號在內(nèi)存中進行緩沖。 如果不希望進行緩沖,可以用NOCACHE選項代替它。

序列在創(chuàng)建之后,在使用的過程中,可以對其進行修改。

比如修改它的最大值、最小值、增幅等,但是不能修改開始值。 需要注意的是,如果已經(jīng)有部分序號被使用,那么對序列的修改只影響以后的序號,對以前已經(jīng)使用的序號不起作用。

修改序列的命令是ALTER SEQUENCE。

用戶可以修改自己的序列,如果希望修改其他用戶的序列,則需要具有ALTER ANY SEQUENCE這個系統(tǒng)權(quán)限。 ALTER SEQUENCE命令的用法與CREATE SEQUENCE命令的用法基本相同,只要將關(guān)鍵字CREATE替換為ALTER即可。

刪除序列的命令是DROP SEQUENCE。

用戶可以刪除自己創(chuàng)建的序列,如果要刪除其他用戶的序列,則要具有DROP ANY SEQUENCE 系統(tǒng)權(quán)限。 序列被刪除后,它的相關(guān)信息就被從數(shù)據(jù)字典中刪除。

序列的使用

對用戶而言,序列中的可用資源是其中包含的序號。

用戶可以通過SELECT命令獲得可用的序號,也可以將序號應(yīng)用于DML語句和表達式中。 如果要使用其他用戶的序列,則 必須具有對該序列的SELECT權(quán)限。

序列提供了兩個偽列,即NEXTVAL 和CURRVAL,用來訪問序列中的序號。 其中NEXTVAL代表下一個可用的序號, CURRYAL代表當前的序號。 序列可以認為是包含了一系列序號的一個指針。 序列剛被創(chuàng)建時,這個指針位于第一個序號之前,以后每獲得一個序號,指針就向后移動一個位置,這時就可以用CURRVAL訪問序列中的當前序號,用NEXTVAL訪問下一個序號。

在第一次使用序列中的序號時,必須首先訪問NEXTVAL偽列,使指針指向第一個序號。

通過SELECT語句可以從序列中獲得一個可用的序號。

例如:

SELECT seq1.nextval FROM dual;

在SELECT語句中使用表dual是必要的,因為SELECT語句將根據(jù)表中數(shù)據(jù)的行數(shù)返回若干個序號,并且每訪問一次NEXTVAL 偽列,指針就向后移動一個序號。

CURRVAL偽列代表序列中的當前序號,訪問這個偽列時指針并不向后移動。

CURRVAL偽列的引用方法與NEXTVAL偽列相同,引用格式為:序列名.currval 。 序列還可應(yīng)用于SELECT語句的其他形式。

例如:

SELECT seq1.nextval, empno FROM scott.emp;

在更多情況下序列的作用為表中的主鍵列或其他列提供一個唯一的序號。

例如:

INSERT INTO scott.dept(deptno, dname) VALUES(seq1.nextval, 'lili');

序列是一種共享式的數(shù)據(jù)庫對象,用戶可以直接使用自己創(chuàng)建的序列,其他用戶也可以訪問當前用戶的序列,只要具有對這個序列的SELECT權(quán)限即可。 如果一個序號被某個用戶獲得,那么其他用戶就不能再獲得這個序號了。 也就是說,序列是可以共享的,但序列中的序號卻是不能共享的。 對序列中序號的訪問操作是作為一個單獨的事務(wù)實現(xiàn)的,這個事務(wù)的執(zhí)行與其他事務(wù)的執(zhí)行成功與否無關(guān)。 如果包含一條DML語句的事務(wù)被回滾了,那么對序列的操作是無法回滾的。

注:如果是在可循環(huán)的序列中,序號可被其他用戶循環(huán)使用。

在訪問序列中的序號時,可能會發(fā)生序號不連續(xù)的情況,不連續(xù)的原因可能是事務(wù)發(fā)生了回滾,或者多個用戶共同訪問同一個序列。 一個用戶要訪問其他用戶的序列時,不僅要具有對這個序列的SELECT權(quán)限,在訪問時還要在序列的名稱前以用戶名進行限定。 例如:

SELECT sys.seq1.nextval FROM dual;

如果要將一個序列的SELECT權(quán)限授予其他用戶,相應(yīng)的GRANT命令格式為:

GRANT SELECT ON 序列名 TO 用戶名;

序列信息的查詢

序列作為一種數(shù)據(jù)庫對象,它的相關(guān)信息也存儲在數(shù)據(jù)字典中。

與序列相關(guān)的數(shù)據(jù)字典有三個: USER_SEQUENCES 、ALL SEQUENCES和DBA_SEQUENCES 。 其中數(shù)據(jù)字典USER SEQUENCES 的各列及意義如下所示:

SEQUENCE_NAME 序列名

MIN_VALUE 最小值

MAX_VALUE 最大值

INCREMENT_BY 增幅

CYCLE_FLAG 是否循環(huán)

ORDER_FLAG 是否按順序

CACHE_SIZE 緩存大小

LAST_NUMBER 下一個可用值

注:ORDER_FLAG的解釋:

Note that the ORDER option is only necessary to guarantee ordered generation if you are using Oracle with the Parallel Server option in parallel mode. If you are using exclusive mode, sequence numbers are always generated in order. LAST_NUMBER的解釋:

使用的或緩存的最后一個序列號,一般大于緩沖區(qū)中的最后一個值。

LAST_NUMBER列在普通的數(shù)據(jù)庫操作過程中不被更新,它在數(shù)據(jù)庫的重新啟動/恢復操作中使用。

CACHE_SIZE的解釋:

在內(nèi)存中緩存的序號用完之后,再向內(nèi)存中添加序號。

例如:

SELECT order_flag, last_number,max_value,cache_size from user_sequences where sequence_name='SEQ1';

本文標題:詳解Oracle數(shù)據(jù)庫對象:序列相關(guān)操作
分享地址:http://www.dlmjj.cn/article/djisgpe.html