a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 125|回复: 0

[考试辅导] Oracle性能调优:oracle中序列讲解

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
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    在获取序列的当前值时,必须先通过检索序列的下一个值对序列初始化
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 08:43 , Processed in 0.212073 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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