简单得说,通过dbms_random包调用随机数的方法大致有4种: 1、dbms_random.normal5 o2 C) ?" \! Q8 N
这个函数不带参数,能返回normal distribution的一个number类型,所以基本上随机数会在-1到1之间。
& y" O1 ~* h \ 简单测试了一下,产生100000次最大能到5左右:" b% c6 z% R1 P1 d5 Y
SQL> declare1 @% ^/ b! u- u
2 i number:=0;5 N" D- ]$ H: d; \; F% y2 b
3 j number:=0;* q. d9 J U4 E4 E4 r
4 begin
) L5 m& s$ N# q+ a. x1 v 5 for k in 1 .. 100000 loop( I( Q/ g, y/ t
6 i:= dbms_random.normal;. I* G# |8 @9 G' G5 U: ~ J4 o0 p
7 if i > j
f3 K8 a8 R# |# [; o+ H) u5 B 8 then j:=i;
8 F9 j* F1 z+ b% I 9 end if;, x( j, f2 U' w9 L
10 end loop;
3 }/ @& g: Z; Q1 g" I. Q' t* V 11 dbms_output.put_line(j);
; d+ P* y4 S$ X7 p+ m3 L. u2 ] 12 end;
6 L+ G$ X- H- @0 F7 Q3 h 13 /) D+ ^7 v9 ~) Y* ^' D/ c
5.15325081797418404136433867107468983182' i0 h& _8 `2 y% G% N
PL/SQL procedure successfully completed. o2 Z: G; B/ B/ [2 c
2、dbms_random.random$ u% O! a# {3 {3 ^. d n) l6 U- ]
这个也没有参数,返回一个从-power(2,31)到power(2,31)的整数值
/ j0 s, g1 ~2 V" a 3、dbms_random.value
3 W9 ^! A! |8 e6 z/ y/ b) ^% b6 ]% D 这个函数分为两种,一种是没有参数,则直接返回0-1之间的38位小数
% F& d, w* V' h5 }/ r, G _ SQL > column value format 9.99999999999999999999999999999999999999
0 _8 {3 i3 k) J* [5 {' U& P$ G SQL > select dbms_random.value from dual;8 D( r8 i9 [* d& a) D' L" e
VALUE2 O& [& P) t* r9 M
-----------------------------------------5 s' e: z. a0 x7 q! x# T9 f2 q" u! W
.58983014999643548701631750396301271752
0 Q P! Q$ U# u7 o
0 h( h; }( J% |) o; N# h5 M</p> RMAN> SWITCH DATAFILE 6 TO COPY;
. X/ Y* R% C+ V/ K8 I) Z& U) C datafile 6 switched to datafile copy "+DGROUP1/toasm/datafile/users.265.683431079"1 s: o% H9 d/ u8 R8 h1 b$ `
RMAN> SQL 'ALTER DATABASE DATAFILE 6 ONLINE';8 f- U5 T0 K' C* A: P, b
RMAN> RECOVER DATAFILE 6;- r1 {+ r2 K N: f3 W/ Z, D
Starting recover at 06-APR-09% y* L/ E1 v8 b! n; H
using channel ORA_DISK_1# Z' j( a6 X3 f) Y
starting media recovery* Y/ m1 |- T9 Y& ]* b
media recovery complete, elapsed time: 00:00:01! }0 }. O( J- A( U9 r, [
Finished recover at 06-APR-099 T0 X' E: [; T5 V8 V9 ^4 C
RMAN> SQL 'ALTER DATABASE DATAFILE 6 ONLINE';5 h: H% N5 A8 Q* l1 N) E: `
sql statement: ALTER DATABASE DATAFILE 6 ONLINE
/ I0 C. T, i5 |7 Q) _9 I p RMAN> REPORT SCHEMA;
- S( j, f6 h0 c$ N9 ~% S% v" I Report of database schema
5 q" c5 R" S. G: @ List of Permanent Datafiles6 o8 w9 z0 i% o8 l# E2 @* U+ f/ j+ m
===========================
6 }) @/ h' G' E* f0 w+ p File Size(MB) Tablespace RB segs Datafile Name
/ @5 X. e4 F8 R4 `1 k4 c& _, d ---- -------- -------------------- ------- ------------------------
- Y2 l, E( R) x+ R/ s5 `& v) d 1 480 SYSTEM *** +DGROUP1/toasm/datafile/system.258.6834283375 a: Z0 D I% B( g# V
2 25 UNDOTBS1 *** +DGROUP1/toasm/datafile/undotbs1.260.683428483
# U3 R0 m$ u5 s: t% p 3 230 SYSAUX *** +DGROUP1/toasm/datafile/sysaux.259.683428421
3 F% k/ V& G! q/ f0 I 4 5 USERS *** +DGROUP1/toasm/datafile/users.262.683428489
9 `# i& u) i; I. g 5 100 EXAMPLE *** +DGROUP1/toasm/datafile/example.261.683428467
- n! e3 s7 S; w. m% }+ T9 c7 Q: j5 b: B 6 10 USERS *** +DGROUP1/toasm/datafile/users.265.683431079
" X* e' b0 \) \. k List of Temporary Files: b4 y. }$ X H0 C( H$ v. m
=======================
9 i8 j- T: e+ e7 v4 x File Size(MB) Tablespace Maxsize(MB) Tempfile Name
& j) A1 E3 N; t' L' W' A ---- -------- -------------------- ----------- --------------------
, t. A) d0 A) R( e' n+ W 2 100 TEMP 32767 +DGROUP1/toasm/tempfile/temp.263.683428909
! |" i8 X- D0 H. x4 c t RMAN> |