sql> create sequence b_q_s_1 2 start with 1 3 increment by 1;
序列已建立。
sql> select b_q_s_1.currval from dual; select b_q_s_1.currval from dual * 第 1 行出現錯誤: ora-08002: 序列 b_q_s_1.currval 尚未在此會話中定義
sql> select last_number from user_sequences where sequence_name='b_q_s_1';
last_number ----------- 1
sql> select b_q_s_1.currval from dual; select b_q_s_1.currval from dual * 第 1 行出現錯誤: ora-08002: 序列 b_q_s_1.currval 尚未在此會話中定義
sql> create table t_s_1(a number,b varchar2(20));
表已建立。
sql> select b_q_s_1.currval from dual; select b_q_s_1.currval from dual * 第 1 行出現錯誤: ora-08002: 序列 b_q_s_1.currval 尚未在此會話中定義
sql> select last_number from user_sequences where sequence_name='b_q_s_1';
last_number ----------- 1
sql> insert into t_s_1 values (b_q_s_1.nextval,'hello');
已建立 1 行。
sql> commit;
提交完成。
sql> select b_q_s_1.currval from dual;
currval ---------- 1
sql> select last_number from user_sequences where sequence_name='b_q_s_1';
last_number ----------- 21
sql> select b_q_s_1.nextval from dual;
nextval ---------- 2
sql>
oracle提供了sequence物件,由系統提供自增長的序列號,通常用於生成資料庫資料記錄的自增長主鍵或序號的地方.
下面介紹一下關於sequence 的生成,修改,刪除等常用的操作:
1. 建立 sequence
使用如下命令新建sequence(使用者需要有create sequence 或者create any sequence許可權):
create sequence test_sequence increment by 1 -- 每次加的個資料 start with 1 -- 從1開始計數 nomaxvalue -- 不設定最大值 nocycle -- 一直累加,不迴圈 cache 10 ; [注意] 如果設定了cache值,oracle將在記憶體裡預先放置一些sequence,以使訪問速度更快。cache裡面的取完後,oracle自動再取一組到cache。 但是,使用cache可能會跳號, 當遇到資料庫突然異常down掉(shutdown abort),cache中的sequence就會丟失. 因此,推薦在create sequence的時候使用 nocache 選項。
2. 使用 sequence:
sequence.currval -- 返回 sequence的當前值 sequence.nextval -- 增加sequence的值,然後返回 sequence 值
[注意] 第一次nextval返回的是初始值; 隨後的nextval會自動增加你定義的increment by值,然後返回增加後的值。
currval 總是返回當前sequence的值,但是在第一次nextval初始化之後才能使用currval,否則會出錯。 一次nextval會增加一次 sequence的值,所以如果你在同乙個語句裡面使用多個nextval,其值就是不一樣的。
sequence 儲存在資料字典中,儲存於user_sequences表 last_number 為最終序列號,也就是sequence游標當前所在的位置。
//get sequence last_number
select last_number from user_sequences where sequence_name=test_seqname
// nextval 使游標指向下一位(增一或減一)
select seqname.nextval from user_sequences 得到下一位游標的值
3. 修改 sequence
使用者必須擁有alter any sequence 許可權才能修改sequence. 可以alter除start至以外的所有sequence引數. 如果想要改變start值,必須 drop sequence 再 re-create.
命令格式如下:
alter sequence test_sequence increment by 10 maxvalue 10000 cycle -- 到10000後從頭開始 nocache ;
4. 刪除 sequence drop sequence order_seq;
關於oracle的自增 sequence
在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。1 create sequence 你首先要有create sequence或者create any sequence許可權,create sequence emp sequence incr...
Oracle中關於sequence物件的使用限制
oracle中關於sequence物件的使用限制 nextval 和 currval 只在 sql 語句中有效,並不在 spl 語句中直接有效。但是使用nextval 和currval的sql語句可用於spl例程 以下限制應用於 sql 語句中的這些運算子 www.2cto.com 1 在 crea...
Oracle學習 Sequence相關
oracle sequence 在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。1 create sequence 你首先要有create sequence或者create any sequence許可權,create sequence e...