oracle中序列讲解9 q. ?. ^5 g2 n$ w- z) Z- v
9 E* L+ r8 V; [& O7 U( G- R' X
序列(sequence):& E6 I: A2 v- s# T
. e, V8 ^$ Y! N) ]
生成一个整数序列: ^ S9 o+ i; T8 w" W6 o
$ V1 }) p) J9 L/ u
通常用来填充数字类型的主键列
~* w8 r& [# i% p; W7 ~3 H
5 T( v. }, m M' F& n# M' o7 g6 T 创建序列语法:
. o5 m' F9 A' c- y7 j7 r 5 A0 w/ O( z7 {8 W v
create sequence seq_name, W* x9 l% z( j: Y
! L( Z+ {7 o$ i( T- Q
[start with start_num]! l# m0 ^( L( x4 U( e. q7 e7 ]
9 R6 l. A9 D7 w# G' s
[increment by incre_num]
" x+ p g0 b6 e8 g' c% B
- m# y1 p2 U; Q% F! _ [maxvalue max_num | nomaxvalue]& Q6 P8 n' C2 m; Y
; I' P; U9 p8 r4 l! _ [minvalue min_num | nominvalue]
8 K2 O) c" f- E$ N( t4 y
8 m( d K& [& A( s" k- Y 创建序列语法(续1):
$ U0 {' M2 f# I; @# J 8 z$ M% u J' _9 a
[cycle | nocycle]) _; \. R! y' r( S9 U5 b
! N- H( B3 r9 \; D! M7 k# W
nomaxvalue指定升序序列的最大值为10^27,降序序列的最大值为-1,为缺省值& E. m, \, a5 W; d8 x$ J5 z% ^
* D1 ]) g; R2 |3 s* ~; e0 e nominvalue指定升序序列的最小值为1,降序序列的最小值为-10^26,为缺省值% T8 l1 u3 r+ {8 V3 F) K' Q) C% R
2 ~/ j# i! E& |3 J
创建序列语法(续2):2 M3 t/ [. o" p: ~$ Y) j+ k9 i
# t3 K! P! \$ I* b, v h
cycle指定升序序列达到最大值时,下一个生成的值是最小值,降序序列类似
* f: g- x3 y6 q& m9 a/ H' I% g 7 v7 T9 X: H# S- B( n/ |3 c0 T
max_num >= start_num
8 ?3 ^0 D$ o+ H& r# J; L / x. q- L: ]% E
max_num > min_num
1 T' C, u1 U& u/ m' O8 c
- k9 S- L9 z$ K 一般选择nocache选项,避免序列不连续
, X. S( Y+ Z1 o) f
. [7 p, u/ @8 k( r$ x7 j& @: U 例1:! K+ q' ?$ S! H$ ^, k
h Z% @, b+ a- O5 X q4 A" l' J
create sequence seq1
6 M2 i( O# S# h/ O' ? 2 G, _- I# Q( U; n
seq1序列全部采用缺省参数,起始值和增长值都是1
* s3 M) |7 h0 R6 G( T& I 5 m8 G. |0 i6 S. d/ u
例2: u5 |3 ~ Z; ?* t6 S4 {
9 b; `! T. t/ a- K9 b& A0 O
create sequence seq2 L1 I& [ y* l2 s: ?3 a7 I
5 c3 v% I, ]( ]2 {" J" i
start with 10 increment by 5
5 H# ^) e" _4 y
. s2 j0 E* u( C2 w2 T 起始值为10,增长值为53 j6 i4 M3 R9 T! k1 [' l: G4 m0 g
8 m7 Z- t% p; R
例3:2 e" `) x1 H% a# }( R
% O. v0 m7 ^6 o$ h9 e0 |+ r& a create sequence seq3/ ]4 Z0 t7 ^' z
3 ?& @' x2 x1 {1 v# Z8 ^
start with 10 increment by -1' _! n7 m' p: U; F- C' _: ?
2 A+ S2 m: n4 I; C7 [, \ minvalue 1 maxvalue 10, s; N% c0 g4 b6 D4 }" N1 ]
! G: n6 g, ?0 k. ^$ R# @, i cycle cache 58 K/ m- z# i& J8 O
, l3 H$ ^# K% o7 j3 K
创建一个初始值为10,增量为-1,并循环创建数值的降序序列
6 u) r; Y3 l' [. e: c
. [, m' P( O, c; \+ d7 D/ V" _6 m 获取序列信息:
% \1 J) ?+ X: X& H* E4 f) n 1 ?3 a# e. s* ~7 V+ |) f8 c
select * from seuser_sequences;
' r' S& E3 w! N0 c; N4 Z; G9 q
+ _& I" M/ g+ s 使用序列:
4 [/ p. w6 |, [9 w8 H Q- n, S 3 a$ c/ b% J6 ]9 O+ u( P' D. }: l
序列生成一系列数字
6 }4 C% f7 |$ c" |+ ]+ }5 x
; _$ H# \. `% i% {4 ~5 O 包含两个伪列,分别是currval 和 nextval
/ l1 I( ~! M$ e: j+ f: s) u 2 F F- ?8 A5 b U4 m0 U' r
currval获取序列的当前值
; T3 n m, A$ b8 z
! H+ q% f9 F+ P/ N. ]/ C) \/ ` select seq1.nextval, seq1.currval from dual;
( E3 D# ~( b- E+ Q
: q) T. [' I+ l nextval获取序列的下一个值
1 O8 L! N( w0 M% Q3 ~
6 i u& f q7 g$ ?/ q! y% U% x 在获取序列的当前值时,必须先通过检索序列的下一个值对序列初始化 |