oracle LPDA,oracle中自动增长列的设置
例如在表user中將主鍵uid設(shè)為自動(dòng)增長(zhǎng)列:
table: user
column: uid ,定義為主鍵,int或number
結(jié)合sequence和trigger實(shí)現(xiàn)id列的值的自動(dòng)增長(zhǎng):
1、create a sequence for the column `uid` of `user`:
CREATE SEQUENCE seq_user_uid
INCREMENT?? BY?? 1 ????? --?? 每次加幾個(gè)
START?? WITH?? 1 ????? --?? 從1開(kāi)始計(jì)數(shù)
NOMAXVALUE ????????? --?? 不設(shè)置最大值
MINVALUE?? 1????????????? -- 序列最小值,小于或等于start值
-- MAXVALUE 20 ??????? --?? 累加,最大值20
NOCYCLE ???????????????? --?? 一直累加,不循環(huán)
--CYCLE ???????????????? --?? 循環(huán) ,達(dá)到最大值20后重新開(kāi)始,違反唯一約束,不適用于主鍵
CACHE?? 10??????????????? -- 緩存序列個(gè)數(shù),有助于提高效率,但可能造成跳號(hào)。
2、Create a trigger for table `user`:
create or replace trigger user_trg
before insert on user
for each row??? --行級(jí)的trigger
declare
tmpNum number;
begin
SELECT seq_user_uid.nextval INTO tmpNum FROM dual;
--:new.uid := 'u' || lpda(tmpNum,7,'0');
:new.uid := tmpNum;
end user_trg;
-------------------------//--:new uid := 'u' || lpda(tmpNum,7,'0');可能有問(wèn)題,觸發(fā)器可能會(huì)報(bào)錯(cuò),
或者直接寫(xiě)成
create or replace trigger user_trg
before insert on user
for each row??? --行級(jí)的trigger
begin
SELECT seq_user_uid.nextval INTO :new.uid FROM dual;
end user_trg;
3、插入值時(shí)必須將列名都寫(xiě)上。
一旦定義了seq_user_uid,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回?? sequence的當(dāng)前值
NEXTVAL=增加sequence的值,然后返回?? sequence?? 值
比如:
seq_user_uid.CURRVAL
seq_user_uid.NEXTVAL
可以使用sequence的地方:
-?? 不包含子查詢、snapshot、VIEW的?? SELECT?? 語(yǔ)句
-?? INSERT語(yǔ)句的子查詢中
-?? NSERT語(yǔ)句的VALUES中
-?? UPDATE?? 的?? SET中
INSERT?? INTO?? emp?? VALUES
(empseq.nextval,?? 'LEWIS',?? 'CLERK',7902,?? SYSDATE,?? 1200,?? NULL,?? 20);??? //empseq.nextval, 添加自增列
SELECT?? empseq.currval?? FROM?? DUAL; //返回最后一個(gè)自增值
Alter?? Sequence
你或者是該sequence的owner,或者有ALTER?? ANY?? SEQUENCE?? 權(quán)限才能改動(dòng)sequence. 可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須 drop sequence
再 re-create?? .
Alter?? sequence?? 的例子
ALTER?? SEQUENCE?? emp_sequence
INCREMENT?? BY?? 10
MAXVALUE?? 10000
CYCLE?? --?? 到10000后從頭開(kāi)始
NOCACHE?? ;
影響Sequence的初始化參數(shù):
SEQUENCE_CACHE_ENTRIES?? =設(shè)置能同時(shí)被cache的sequence數(shù)目。
可以很簡(jiǎn)單的Drop?? Sequence
DROP?? SEQUENCE?? order_seq;
總結(jié)
以上是生活随笔為你收集整理的oracle LPDA,oracle中自动增长列的设置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle := 和=,oracle
- 下一篇: c语言 游戏程序,C语言做的推箱子游戏源