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