熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle中序列sequence用法

2013-11-13 15:55:11  來源: Oracle 

  ) 建立序列命令

  CREATE SEQUENCE [user]sequence_name

  [increment by n]

  [start with n]

  [maxvalue n | nomaxvalue]

  [minvalue n | nominvalue];

  INCREMENT BY 指定序列號之間的間隔該值可為正的或負的整數但不可為序列為升序忽略該子句時缺省值為

  START WITH指定生成的第一個序列號在升序時序列可從比最小值大的值開始缺省值為序列的最小值對於降序序列可由比最大值小的值開始缺省值為序列的最大值

  MAXVALUE指定序列可生成的最大值

  NOMAXVALUE為升序指定最大值為為降序指定最大值為

  MINVALUE指定序列的最小值

  NOMINVALUE為升序指定最小值為為降序指定最小值為

  ) 更改序列命令

  ALTERSEQUENCE [user]sequence_name

  [INCREMENT BY n]

  [MAXVALUE n| NOMAXVALUE ]

  [MINVALUE n | NOMINVALUE]

  修改序列可以

  ? 修改未來序列值的增量

  ? 設置或撤消最小值或最大值

  ? 改變緩沖序列的數目

  ? 指定序列號是否是有序

  ) 刪除序列命令

  DROP SEQUENCE [user]sequence_name

  從數據庫中刪除一序列

  創建一個序列號的語句

  CREATE SEQUENCE EXAM_NO_SEQ

  START WITH

  MAXVALUE

  MINVALUE

  CYCLE

  CACHE

  NOORDER;

  PB中取序列號的用法

  string  v_exam_no

  //獲取申請序號

  SELECT exam_no_seqnextval INTO :v_exam_no FROM dual

  using ghis_database;

  if ghis_databaseSQLCODE<> then

  messagebox(取檢查序號出錯)

  return

  end if

  其他版本

  oracle中沒有自增類型的字段的所以通常情況下需要定義一個sequence來作為自動增長類型字段的數據

  於是記錄了一些關於oracle sequence的資料已備查用!

  Oracle中的序列(sequence)

  : 如何定義一個序列

  僅向前的數字變量(和SQL中的自動編號有點像 identity() )

  格式:

  create sequence <序列名稱>

  start with <起始數>

  increment by <增長量>

  [maxvalue 值]

  [minvalue 值]

  [cycle 當到達最大值的時候將繼續從頭開始]

  [Nocycle 一直累加不循環]

  [Cache ]

  注意

  第一次NEXTVAL返回的是初始值;隨後的NEXTVAL會自動增加你定義的INCREMENT BY值然後返回增加後的值CURRVAL 總是返回當前SEQUENCE的值但是在第一次NEXTVAL初始化之後才能使用CURRVAL否則會出錯一次NEXTVAL會增加一次SEQUENCE的值

  如果指定CACHE值ORACLE就可以預先在內存裡面放置一些sequence這樣存取的快些cache裡面的取完後oracle自動再取一組到cache 使用cache或許會跳號 比如數據庫突然不正常down掉(shutdown abort)cache中的sequence就會丟失 所以可以在create sequence的時候用nocache防止這種情況

  example:

  create sequence mySeq

  start with

  increment by

  maxvalue

  minvalue

  cycle

  :怎麼去取序列數據:

  currval>curenvalue

  nextVal>NextVlaue

  example:

  select mySeqnextVal from dual

  注意一點:currval只有當nextVal執行一次以後才可以用

  在創建表的時候可以使用序列

  具體例子:

  create table 公司基本信息表

  (

  ComPID int

  CompName varchar()

  )

  insert into 公司基本信息表 values(mySeqnextValAA)

  :如何修改序列

  修改前提是sequence 的owner或者有ALTER ANY SEQUENCE 權限才能改動sequence 可以alter除start至以外的所有sequence參數如果想要改變start值必須 drop sequence 再 recreate

  Alter sequence 的例子

  ALTER SEQUENCE emp_sequence

  INCREMENT BY

  MAXvalue

  CYCLE   後從頭開始

  NOCACHE

  影響Sequence的初始化參數

  SEQUENCE_CACHE_ENTRIES =設置能同時被cache的sequence數目

  也可以這樣

  alter sequence mySeq maxvalue

  注意不能改start with其他隨便改(設置minvalue值的時候不能大於當前值)

  :如何查看刪除某個表空間所有序列

  查看

  select * from user_sequences

  如何刪除:

  drop sequence 序列名稱

  sequence屬於什麼對象

  sequence不屬於某個表也不屬於某個字段sequence僅僅屬於某個用戶

  其實在創建了sequence後每個表都可以使用這個sequence但是這樣會引起應用的很多麻煩因此建議每個表都使用一個sequence


From:http://tw.wingwit.com/Article/program/Oracle/201311/17518.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.