a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 61|回复: 1

[综合] Oracle辅导:Oraclesequence序列的用法

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
 oracle中没有自增类型的字段的,所以凡是情形下需要界说一个sequence来作为自动增添类型字段的数据。   于是记实了一些关于oracle sequence的资料,已备查用!
, G/ b4 N9 l, J! ~# \7 g  Oracle中的序列(sequence)) y$ I5 U6 c1 F- k& P/ n. @
1: 若何界说一个序列
. E, Q4 w' O6 b0 k7 Z2 E  仅向前的数字变量(和SQL中的自动编号有点像 identity(1,2)   )
- P: f0 N. X: B3 e2 x; n  名目:9 L+ Q- [) a' p0 l
  create sequence
. `6 d. W5 T& [6 w  start with 8 L" p2 X4 {; w# ]% i0 \! v
  increment by
7 e7 c- f4 N3 M0 \+ r  [maxvalue   值]% L+ q! r8 v8 |; H  p. g; e
  [minvalue   值]: e2 M$ u: t8 r0 g: y
  [cycle 当达到最年夜值的时辰,将继续年夜头起头]7 w: }' j* c( ?! w. }  {
  [Nocycle   -- 一向累加,不轮回]
+ P1 b' C2 K/ Z* Q8 q  [Cache ]
) c) a- K/ V  }  K' W  注重:
0 R( E/ V' R+ f" ?! p  }2 T  第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增添你界说的INCREMENT BY值,然后返回增添后的值。CURRVAL 老是返回当前SEQUENCE的值,可是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会犯错。一次NEXTVAL会增添一次 SEQUENCE的值。8 y) Y6 t2 X0 d+ O
  如不美观指定CACHE值,ORACLE就可以预先在内存琅缦沔放置一些sequence,这样存取的快些。cache琅缦沔的取完后,oracle自动另娶一组到cache。 使用cache或许会跳号, 好比数据库俄然不正常down失踪(shutdown abort),cache中的sequence就会丢失踪. 所以可以在create sequence的时辰用nocache防止这种情形。
; e' \% N( w$ R. A9 m3 p6 q  example:
0 `3 ?* a& W# E5 O; F# g5 o  create sequence mySeq5 B  D; ^# g) D1 \
  start with 1
  ^$ t( r! m4 Z  increment by 2- `; K3 i. z( {# H# C/ c8 N
  maxvalue 40, b- [! ]# |7 v5 Q3 w
  minvalue 1
& `* w5 ^# e" g9 Z3 Z- R& f' g* @  o; [& n7 l# ?/ X: q- j& w. F
  cycle
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:54:50 | 显示全部楼层

Oracle辅导:Oraclesequence序列的用法

</p>2:怎么去取序列数据:
$ J' @9 x1 s6 p  O1 M, l) `  currval--->curenvalue; N9 G: u* \9 B# Y2 ^& N
  nextVal-->NextVlaue
# e) f- ?( y1 s+ O0 ?  _  example:4 q9 m( ?8 |! H- }1 P$ I& q
  select mySeq.nextVal from dual6 @) ]7 \: K  z& f: U2 l
  注重一点:currval只有当nextVal执行一次往后才可以用.+ j6 w0 V( R# O; X8 @# o9 `
  在建树表的时辰,可以使用序列.
( k) i) A: D6 b+ ]5 A2 p2 C  具鼻子:
; F* F# U0 D6 I8 v! X* ^0 P  create table 公司根基信息表
7 a8 a: X& G/ g7 m( N# x. `* h  (' q  e" Q# W$ _
  ComPID int,
% \" Y6 i& v' ]  CompName varchar2(20), R7 N. l0 S2 Q4 u# a9 {
  )
+ h3 c: \+ h& W7 |! B2 ~% t& I; R6 n7 o  insert into 公司根基信息表 values(mySeq.nextVal,'AA')$ F: L* Z7 n8 L" l4 {% h' ?2 x# G% x
3:若何改削序列 ' ]% R% g( u" ~( T6 T5 L) n
  改削前提是sequence 的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如不美观想要改变start值,必需 drop sequence 再 re-create .& @) n8 l" [3 f+ g( Y
  Alter sequence 的例子:
4 o3 B( g% Z3 `( E  E  ALTER SEQUENCE emp_sequence
- h) V' l% V8 I2 R( {& r  INCREMENT BY 10: ^4 t9 R5 i% f0 u  L9 w+ _8 G
  MAXvalue 10000
0 P( p  U+ V1 t! z  CYCLE   -- 到10000后年夜头起头
9 C& @6 s' O2 |( c7 f# e  E  NOCACHE% ?& z( k9 G* f; [1 x
  影响Sequence的初始化参数:
. H; T1 `  M8 @! W2 `* [' g7 K  SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。/ m5 K- t5 I, s
  也可以这样
. C/ Y. @' `( J9 O  alter sequence mySeq maxvalue 500- z; h3 u* d/ W* q" [) _: z1 r
  注重:不能改start with,其他随便改(设置minvalue值的时辰不能年夜于当前值)
, K0 r7 x/ b( a% N3 q; q+ s4:若何查看删除某个表空间所有序列
& y! {; v. ^; f# Y# n7 g  查看:
+ j' N/ f  T: J( q6 ~3 W) ^  select * from user_sequences! `0 V; W& E7 p3 Y5 f
  若何删除:9 d& U6 Y  o$ w2 T- n) l
  drop sequence 序列名称
: ?! u5 L) O& H5 n& @; ^: _5:sequence属于什么对象 ( Z8 I! A, y/ f8 w. P  m, [
  sequence不属于某个表,也不属于某个字段,sequence仅仅属于某个用户。
' q) j  g* X) }0 n  L  其其实建树了sequence后,每个表都可以使用这个sequence,可是这样会引起应用的良多麻烦,是以,建议每个表都使用一个sequence。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 06:45 , Processed in 0.364909 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表