会计考友 发表于 2012-8-4 13:54:49

Oracle辅导:Oraclesequence序列的用法

 oracle中没有自增类型的字段的,所以凡是情形下需要界说一个sequence来作为自动增添类型字段的数据。   于是记实了一些关于oracle sequence的资料,已备查用!
  Oracle中的序列(sequence)
1: 若何界说一个序列
  仅向前的数字变量(和SQL中的自动编号有点像 identity(1,2)   )
  名目:
  create sequence
  start with
  increment by
  
  
  
  
  
  注重:
  第一次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 1
  increment by 2
  maxvalue 40
  minvalue 1

  cycle

会计考友 发表于 2012-8-4 13:54:50

Oracle辅导:Oraclesequence序列的用法

</p>2:怎么去取序列数据:
  currval--->curenvalue
  nextVal-->NextVlaue
  example:
  select mySeq.nextVal from dual
  注重一点:currval只有当nextVal执行一次往后才可以用.
  在建树表的时辰,可以使用序列.
  具鼻子:
  create table 公司根基信息表
  (
  ComPID int,
  CompName varchar2(20)
  )
  insert into 公司根基信息表 values(mySeq.nextVal,'AA')
3:若何改削序列
  改削前提是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数目。
  也可以这样
  alter sequence mySeq maxvalue 500
  注重:不能改start with,其他随便改(设置minvalue值的时辰不能年夜于当前值)
4:若何查看删除某个表空间所有序列
  查看:
  select * from user_sequences
  若何删除:
  drop sequence 序列名称
5:sequence属于什么对象
  sequence不属于某个表,也不属于某个字段,sequence仅仅属于某个用户。
  其其实建树了sequence后,每个表都可以使用这个sequence,可是这样会引起应用的良多麻烦,是以,建议每个表都使用一个sequence。
页: [1]
查看完整版本: Oracle辅导:Oraclesequence序列的用法