欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle中的序列SEQUENCE詳解

 更新時間:2022年05月27日 08:20:08   作者:springsnow  
本文詳細(xì)講解了Oracle中的序列SEQUENCE,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、序列介紹

Oracle的序列是一種數(shù)據(jù)庫對象,主要作用是用來產(chǎn)生唯一值。序列被創(chuàng)建以后可以通過數(shù)據(jù)字典找到序列對象,因此序列可以被多個對象共享。

二、創(chuàng)建序列

序列使用CREATE SEQUENCE語法進(jìn)行創(chuàng)建:

CREATE SEQUENCE sequence 
[INCREMENT BY n]
 [START WITH n]
 [{MAXVALUE n | NOMAXVALUE}]
 [{MINVALUE n | NOMINVALUE}]
 [{CYCLE | NOCYCLE}]
 [{CACHE n | NOCACHE}];
  • NCREMENT BY:用于定義序列的步長,如果省略,則默認(rèn)為1,如果是負(fù)值,則代表序列的值是遞減的。
  • START WITH:定義序列的初始值(即產(chǎn)生的第一個值),默認(rèn)為1。
  • MAXVALUE:定義序列能生成的最大值。NOMAXVALUE是默認(rèn)選項(xiàng),代表沒有最大值,這時,對于遞增序列,系統(tǒng)能夠產(chǎn)生的最大值是10的27次方;對于遞減序列,最大值是-1。
  • MINVALUE:定義序列能生成的最小值。NOMINVALUE是默認(rèn)選項(xiàng),代表沒有最小值,這時,對于遞減序列,系統(tǒng)能夠產(chǎn)生的最小值是負(fù)的10的26次方;對于遞減序列,最小值是1。
  • CYCLE和NOCYCLE:表示當(dāng)序列生成器的值達(dá)到限制后是否循環(huán)。如果循環(huán),當(dāng)遞增序列達(dá)到最大值時,循環(huán)到最小值;對于遞減序列,達(dá)到最小值時,循環(huán)到最大值。如果不循環(huán),達(dá)到限制值后,繼續(xù)產(chǎn)生新值就會發(fā)生錯誤。
  • CACHE:定義存放序列的內(nèi)存塊的大小,默認(rèn)為20。NOCACHE表示不對序列進(jìn)行內(nèi)存緩沖。對序列進(jìn)行內(nèi)存緩沖,可以改善序列的性能。

例如:

CREATE SEQUENCE invoice_seq
INCREMENT BY 1
START WITH 1
MAXVALUE 9999999
NOCYCLE NOCACHE;

三、查詢序列

一旦序列被創(chuàng)建,序列的創(chuàng)建代碼就被文本化在數(shù)據(jù)字典中,可以在user_objects數(shù)據(jù)字典中看到,如:

SELECT object_name,object_id,object_type  FROM user_objects WHERE object_name = 'INVOICE_SEQ';

在user_sequences表中保存了序列明細(xì)信息:

SELECT sequence_name, min_value, max_value, increment_by, last_number  FROM user_sequences;

四、使用序列

NEXTVAL和CURRVAL偽列

  • NEXTVAL:返回下一個可用的序列值,它每次返回一個唯一的被引用值,實(shí)際對不同的用戶也是如此。當(dāng)使用sequence.NEXTVAL時,一個新的序列數(shù)被產(chǎn)生并且當(dāng)前的序列數(shù)被放入CURRVAL。
  • CURRVAL:獲得當(dāng)前的序列值。在首次使用NEXTVAL之前就使用CURRVAL的話,會報錯。

使用如下 :

SELECT invoice_seq.CURRVAL,invoice_seq.NEXTVAL FROM DUAL;

INSERT INTO invoice  (invoice_id, vendor_id, invoice_number, invoice_total  )
      VALUES (invoice_seq.NEXTVAL, 10, 'INV' || invoice_seq.CURRVAL, 100  );

可以在下面的上下文中使用NEXTVAL和CURRVAL:

  • 不是子查詢的一部分的SELECT語句的字段列表。
  • INSERT語句中子查詢的SELECT列表。
  • INSERT語句中的VALUES子句。
  • UPDATE語句中的SET子句。

不能再以下的上下文中使用NEXTVAL和CURRVAL:

  • 視圖的SELECT列表。
  • 帶DISTINCT的SELECT語句。
  • 帶GROUP BY、HAVING或ORDER BY子句的SELECT語句。
  • 在SELECT、DELETE或UPDATE語句中的子句。
  • 在CREATE TABLE或ALTER TABLE語句中的DEFAULT表達(dá)式。

另外要注意,ROLLBACK并不能使序列值回滾。

五、修改序列

如:

ALTER SEQUENCE invoice_seq     INCREMENT BY 2 MAXVALUE 10   NOCACHE  NOCYCLE;

修改序列時,有如下幾個限制:

  • 不能該表序列的起始值。
  • 最小值不能大于當(dāng)前值。
  • 最大值不能小于當(dāng)前值。
  • 修改后的序列規(guī)則不會影響以前的序列值,只有未來的序列值會受到影響。
  • 用戶必須具有ALTER SEQUENCE的權(quán)限。

六、刪除序列

DROP SEQUENCE invoice_seq;

七、創(chuàng)建自增序列

1、創(chuàng)建一個序列

create sequence sq_recid 
minvalue 1 maxvalue 999999  increment by 1   start with 1 noCYCLE;

2、創(chuàng)建一個觸發(fā)器

create or replace trigger  trg_test
  before  insert on test for each row
begin
  select sq_recid.nextval into :new.ID from dual;
end;

alter  trigger trg_test  enable;

3、在C#中也可以手工插入序列到表中

string sql="insert into test(ID,otherCol)value (Sql_recid.nextval,***)
    retuing ID into :ID"

到此這篇關(guān)于Oracle序列SEQUENCE的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • oracle數(shù)據(jù)庫如何給用戶授權(quán)查詢權(quán)限

    oracle數(shù)據(jù)庫如何給用戶授權(quán)查詢權(quán)限

    這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫如何給用戶授權(quán)查詢權(quán)限的相關(guān)資料,授予權(quán)限是數(shù)據(jù)庫管理中的重要任務(wù),它可以確保用戶有權(quán)訪問所需的數(shù)據(jù)庫對象,并執(zhí)行必要的操作,需要的朋友可以參考下
    2024-01-01
  • Informatica bulk與normal模式的深入詳解

    Informatica bulk與normal模式的深入詳解

    本篇文章是對Informatica bulk與normal模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Oracle?system/用戶被鎖定的解決方法

    Oracle?system/用戶被鎖定的解決方法

    很多人對oracle數(shù)據(jù)庫會將用戶鎖定感覺莫名其妙,所以下面這篇文章主要介紹了Oracle?system/用戶被鎖定的解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Oracle數(shù)據(jù)庫中的游標(biāo)cursor使用詳解

    Oracle數(shù)據(jù)庫中的游標(biāo)cursor使用詳解

    這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫中的游標(biāo)使用的相關(guān)資料,游標(biāo)提供了一種從表中檢索數(shù)據(jù)并進(jìn)行操作的靈活手段,游標(biāo)主要用在服務(wù)器上,處理由客戶端發(fā)送給服務(wù)器端的SQL語句,或是批處理、存儲過程、觸發(fā)器中的數(shù)據(jù)處理請求,需要的朋友可以參考下
    2023-10-10
  • Oracle數(shù)據(jù)庫表被鎖如何查詢和解鎖詳解

    Oracle數(shù)據(jù)庫表被鎖如何查詢和解鎖詳解

    作為一個IT技術(shù)人員,可能經(jīng)常遇到在使用Oracle數(shù)據(jù)時,由于操作不當(dāng)導(dǎo)致數(shù)據(jù)庫鎖表,從而影響項(xiàng)目正常使用,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫表被鎖如何查詢和解鎖的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 解決Oracle?11g?導(dǎo)出數(shù)據(jù)報?“ORA-01455:?轉(zhuǎn)換列溢出整數(shù)數(shù)據(jù)類型”的問題

    解決Oracle?11g?導(dǎo)出數(shù)據(jù)報?“ORA-01455:?轉(zhuǎn)換列溢出整數(shù)數(shù)據(jù)類型”的問題

    這篇文章主要介紹了Oracle?11g?導(dǎo)出數(shù)據(jù)報?“ORA-01455:?轉(zhuǎn)換列溢出整數(shù)數(shù)據(jù)類型”的問題,文中給大家介紹了ORACLE?11g?導(dǎo)出數(shù)據(jù)的操作步驟,需要的朋友可以參考下
    2021-12-12
  • oracle 實(shí)際值超過數(shù)據(jù)庫某個字段指定長度報錯解決

    oracle 實(shí)際值超過數(shù)據(jù)庫某個字段指定長度報錯解決

    本節(jié)主要介紹了oracle 實(shí)際值超過數(shù)據(jù)庫某個字段指定長度報錯解決方法,需要的朋友可以參考下
    2014-07-07
  • oracle表分區(qū)的概念及操作

    oracle表分區(qū)的概念及操作

    Oracle的表分區(qū)功能通過改善可管理性、性能和可用性,從而為各式應(yīng)用程序帶來了極大的好處。這篇文章主要介紹了oracle表分區(qū)的概念及操作,需要的朋友可以參考下
    2021-04-04
  • Oracle 10g利用amdu抽取數(shù)據(jù)文件的方法教程

    Oracle 10g利用amdu抽取數(shù)據(jù)文件的方法教程

    這篇文章主要給大家介紹了關(guān)于Oracle 10g利用amdu抽取數(shù)據(jù)文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Oracle動態(tài)交叉表生成

    Oracle動態(tài)交叉表生成

    Oracle動態(tài)交叉表生成...
    2007-03-03

最新評論