新聞中心
oracle怎樣在表中引用序列
在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。
站在用戶的角度思考問題,與客戶深入溝通,找到三元網(wǎng)站設計與三元網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋三元地區(qū)。
1、createsequence
你首先要有createsequence或者createanysequence權限,
createsequenceemp_sequence
incrementby1--每次加幾個
startwith1--從1開始計數(shù)
nomaxvalue--不設置最大值
nocycle--一直累加,不循環(huán)
cache10;
一旦定義了emp_sequence,你就可以用currval,nextval
currval=返回sequence的當前值
nextval=增加sequence的值,然后返回sequence值
比如:
emp_sequence.currval
emp_sequence.nextval
可以使用sequence的地方:
-不包含子查詢、snapshot、view的select語句
-insert語句的子查詢中
-nsert語句的values中
-update的set中
可以看如下例子:
insertintoempvalues
(empseq.nextval,'lewis','clerk',7902,sysdate,1200,null,20);
selectempseq.currvalfromdual;
但是要注意的是:
-第一次nextval返回的是初始值;隨后的nextval會自動增加你定義的incrementby值,然后返回增加后的值。currval總是返回當前sequence的值,但是在第一次nextval初始化之后才能使用currval,否則會出錯。一次nextval會增加一次sequence的值,所以如果你在同一個語句里面使用多個nextval,其值就是不一樣的。明白?
-如果指定cache值,oracle就可以預先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動再取一組到cache。使用cache或許會跳號,比如數(shù)據(jù)庫突然不正常down掉(shutdownabort),cache中的sequence就會丟失.所以可以在createsequence的時候用nocache防止這種情況。
2、altersequence
你或者是該sequence的owner,或者有alteranysequence權限才能改動sequence.可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須dropsequence再re-create.
altersequence的例子
altersequenceemp_sequence
incrementby10
maxvalue10000
cycle--到10000后從頭開始
nocache;
影響sequence的初始化參數(shù):
sequence_cache_entries=設置能同時被cache的sequence數(shù)目。
可以很簡單的dropsequence
dropsequenceorder_seq;
oracle序列怎么用
oracle是沒有自增類型字段的,你可以用觸發(fā)器,每次insert都觸發(fā)獲取一次這個序列的nextval就行。
不過序列是有緩存的,所以插入的數(shù)字有可能不是連續(xù)的。
如果一定要避免這個問題,你可以不用序列,而采用日志表的形式,在表中記錄最大的編號。如果對性能沒有要求,直接在插入表中統(tǒng)計也未嘗不可。
Oracle中序列sequence用法
) 建立序列命令
CREATE SEQUENCE [user ]sequence_name
[increment by n]
[start with n]
[maxvalue n | nomaxvalue]
[minvalue n | nominvalue];
INCREMENT BY 指定序列號之間的間隔 該值可為正的或負的整數(shù) 但不可為 序列為升序 忽略該子句時 缺省值為
START WITH 指定生成的第一個序列號 在升序時 序列可從比最小值大的值開始 缺省值為序列的最小值 對于降序 序列可由比最大值小的值開始 缺省值為序列的最大值
MAXVALUE 指定序列可生成的最大值
NOMAXVALUE 為升序指定最大值為 為降序指定最大值為
MINVALUE 指定序列的最小值
NOMINVALUE 為升序指定最小值為 為降序指定最小值為
) 更改序列命令
ALTERSEQUENCE [user ]sequence_name
[INCREMENT BY n]
[MAXVALUE n| NOMAXVALUE ]
[MINVALUE n | NOMINVALUE]
修改序列可以
? 修改未來序列值的增量
? 設置或撤消最小值或最大值
? 改變緩沖序列的數(shù)目
? 指定序列號是否是有序
) 刪除序列命令
DROP SEQUENCE [user ]sequence_name
從數(shù)據(jù)庫中刪除一序列
創(chuàng)建一個序列號的語句
CREATE SEQUENCE EXAM_NO_SEQ
START WITH
MAXVALUE
MINVALUE
CYCLE
CACHE
NOORDER;
PB中取序列號的用法
string? v_exam_no
//獲取申請序號
SELECT exam_no_seq nextval INTO :v_exam_no FROM dual
using ghis_database;
if ghis_database SQLCODE then
messagebox( 取檢查序號出錯 )
return
end if
其他版本
oracle中沒有自增類型的字段的 所以通常情況下需要定義一個sequence來作為自動增長類型字段的數(shù)據(jù)
于是記錄了一些關于oracle sequence的資料 已備查用!
Oracle中的序列(sequence)
: 如何定義一個序列
僅向前的數(shù)字變量(和SQL中的自動編號有點像 identity( ) )
格式:
create sequence 序列名稱
start with 起始數(shù)
increment by 增長量
[maxvalue 值]
[minvalue 值]
[cycle 當?shù)竭_最大值的時候 將繼續(xù)從頭開始]
[Nocycle 一直累加 不循環(huán)]
[Cache ]
注意
第一次NEXTVAL返回的是初始值;隨后的NEXTVAL會自動增加你定義的INCREMENT BY值 然后返回增加后的值 CURRVAL 總是返回當前SEQUENCE的值 但是在第一次NEXTVAL初始化之后才能使用CURRVAL 否則會出錯 一次NEXTVAL會增加一次SEQUENCE的值
如果指定CACHE值 ORACLE就可以預先在內(nèi)存里面放置一些sequence 這樣存取的快些 cache里面的取完后 oracle自動再取一組到cache 使用cache或許會跳號 比如數(shù)據(jù)庫突然不正常down掉(shutdown abort) cache中的sequence就會丟失 所以可以在create sequence的時候用nocache防止這種情況
example:
create sequence mySeq
start with
increment by
maxvalue
minvalue
cycle
:怎么去取序列數(shù)據(jù):
currval curenvalue
nextVal NextVlaue
example:
select mySeq nextVal from dual
注意一點:currval只有當nextVal執(zhí)行一次以后才可以用
在創(chuàng)建表的時候 可以使用序列
具體例子:
create table 公司基本信息表
(
ComPID int
CompName varchar ( )
)
insert into 公司基本信息表 values(mySeq nextVal AA )
:如何修改序列
修改前提是sequence 的owner 或者有ALTER ANY SEQUENCE 權限才能改動sequence 可以alter除start至以外的所有sequence參數(shù) 如果想要改變start值 必須 drop sequence 再 re create
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY
MAXvalue
CYCLE 到 后從頭開始
NOCACHE
影響Sequence的初始化參數(shù)
SEQUENCE_CACHE_ENTRIES =設置能同時被cache的sequence數(shù)目
也可以這樣
alter sequence mySeq maxvalue
注意 不能改start with 其他隨便改(設置minvalue值的時候不能大于當前值)
:如何查看刪除某個表空間所有序列
查看
select * from user_sequences
如何刪除:
drop sequence 序列名稱
sequence屬于什么對象
sequence不屬于某個表 也不屬于某個字段 sequence僅僅屬于某個用戶
lishixinzhi/Article/program/Oracle/201311/17518
oracle創(chuàng)建表時,怎么用序列
實現(xiàn)思路:將主鍵設置為序列,自后每次按照固定規(guī)則增加相應的數(shù)字即可。
1、首先要有create sequence或者create any sequence權限,
create sequence emp_sequence
INCREMENT BY 1 -- 每次加幾個
START WITH 1 -- 從1開始計數(shù)
NOMAXVALUE -- 不設置最大值
NOCYCLE -- 一直累加,不循環(huán)
CACHE 10;
2、插入到表中,
INSERT INTO emp VALUES
(emp_sequence .nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);
網(wǎng)頁題目:oracle序列如何用 oracle序列函數(shù)
新聞來源:http://fisionsoft.com.cn/article/hhojpc.html