国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Oracle中的序列SEQUENCE詳解

瀏覽:180日期:2023-03-12 15:25:03

一、序列介紹

Oracle的序列是一種數據庫對象,主要作用是用來產生唯一值。序列被創建以后可以通過數據字典找到序列對象,因此序列可以被多個對象共享。

二、創建序列

序列使用CREATE SEQUENCE語法進行創建:

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

例如:

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

三、查詢序列

一旦序列被創建,序列的創建代碼就被文本化在數據字典中,可以在user_objects數據字典中看到,如:

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

在user_sequences表中保存了序列明細信息:

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

四、使用序列

NEXTVAL和CURRVAL偽列

  • NEXTVAL:返回下一個可用的序列值,它每次返回一個唯一的被引用值,實際對不同的用戶也是如此。當使用sequence.NEXTVAL時,一個新的序列數被產生并且當前的序列數被放入CURRVAL。
  • CURRVAL:獲得當前的序列值。在首次使用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表達式。

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

五、修改序列

如:

ALTER SEQUENCE invoice_seq     INCREMENT BY 2 MAXVALUE 10   NOCACHE  NOCYCLE;

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

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

六、刪除序列

DROP SEQUENCE invoice_seq;

七、創建自增序列

1、創建一個序列

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

2、創建一個觸發器

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"

到此這篇關于Oracle序列SEQUENCE的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。

標簽: Oracle
相關文章:
主站蜘蛛池模板: 日韩精品一级a毛片 | 国产成人精品综合 | 好看欧美视频高清va | 久久久久久久国产a∨ | 久久精品99| 综合精品视频 | 国产精品免费一区二区三区 | 欧美激情特级黄aa毛片 | 亚洲精品视频网 | 日本a级毛片免费视频播放 日本a级三级三级三级久久 | 国产精品莉莉欧美自在线线 | 在线亚洲精品国产成人二区 | 亚洲欧美一区二区三区在线观看 | 在线播放波多野结衣 | 久久香蕉国产视频 | 亚洲欧美综合国产精品一区 | 青青热在线精品视频免费 | 99热久久国产精品免费观看 | 男人透女人超爽视频免费 | 日韩欧美亚洲视频 | 狠狠澡夜夜澡人人爽 | 性生活视频网站 | 一级高清毛片免费a级高清毛片 | 亚洲精品国产第一区第二区国 | 欧美人与鲁交大毛片免费 | 免费视频观看在线www日本 | 中美日韩在线网免费毛片视频 | 国产成人精品曰本亚洲77美色 | 91精品国产91热久久久久福利 | 香蕉依依精品视频在线播放 | 日韩视频专区 | 欧美第一视频 | 亚洲一级黄色毛片 | 在线观看人成网站深夜免费 | 国内国语一级毛片在线视频 | 国产高清视频在线观看 | 国产综合13p | 亚洲国产精品久久 | 欧美成人香蕉网在线观看 | 韩国三级大全久久网站 | 成人做爰视频www在线观看 |