CREATE
OR
REPLACE
PACKAGE
SYS.dbms_random
AS
------------
-- OVERVIEW
--
-- This package should be installed as SYS. It generates a sequence of
-- random 38-digit Oracle numbers. The expected length of the sequence
-- is about power(10,28), which is hopefully long enough.
--
--------
-- USAGE
--
-- This is a random number generator. Do not use for cryptography.
-- For more options the cryptographic toolkit should be used.
--
-- By default, the package is initialized with the current user
-- name, current time down to the second, and the current session.
--
-- If this package is seeded twice with the same seed, then accessed
-- in the same way, it will produce the same results in both cases.
--
--------
-- EXAMPLES
--
-- To initialize or reset the generator, call the seed procedure as in:
-- execute dbms_random.seed(12345678);
-- or
-- execute dbms_random.seed(TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS'));
-- To get the random number, simply call the function, e.g.
-- my_random_number BINARY_INTEGER;
-- my_random_number := dbms_random.random;
-- or
-- my_random_real NUMBER;
-- my_random_real := dbms_random.value;
-- To use in SQL statements:
-- select dbms_random.value from dual;
-- insert into a values (dbms_random.value);
-- variable x NUMBER;
-- execute :x := dbms_random.value;
-- update a set a2=a2+1 where a1 < :x;
-- Seed with a binary integer
PROCEDURE
seed(val
IN
BINARY_INTEGER
);
PRAGMA
restrict_references
(seed,
WNDS
);
-- Seed with a string (up to length 2000)
PROCEDURE
seed(val
IN
VARCHAR2
);
PRAGMA
restrict_references
(seed,
WNDS
);
-- Get a random 38-digit precision number, 0.0 <= value < 1.0
FUNCTION
value
RETURN
NUMBER
;
PRAGMA
restrict_references
(
value
,
WNDS
);
-- get a random Oracle number x, low <= x < high
FUNCTION
value
(low
IN
NUMBER
, high
IN
NUMBER
)
RETURN
NUMBER
;
PRAGMA
restrict_references
(
value
,
WNDS
);
-- get a random number from a normal distribution
FUNCTION
normal
RETURN
NUMBER
;
PRAGMA
restrict_references
(normal,
WNDS
);
-- get a random string
FUNCTION
string
(opt
char
, len
NUMBER
)
/* "opt" specifies that the returned string may contain:
'u','U' : upper case alpha characters only
'l','L' : lower case alpha characters only
'a','A' : alpha characters only (mixed case)
'x','X' : any alpha-numeric characters (upper)
'p','P' : any printable characters
*/
RETURN
VARCHAR2
;
-- string of <len> characters (max 60)
PRAGMA
restrict_references
(
string
,
WNDS
);
-- Obsolete, just calls seed(val)
PROCEDURE
initialize(val
IN
BINARY_INTEGER
);
PRAGMA
restrict_references
(initialize,
WNDS
);
-- Obsolete, get integer in ( -power(2,31) <= random < power(2,31) )
FUNCTION
random
RETURN
BINARY_INTEGER
;
PRAGMA
restrict_references
(random,
WNDS
);
-- Obsolete, does nothing
PROCEDURE
terminate;
TYPE
num_array
IS
TABLE
OF
NUMBER
INDEX
BY
BINARY_INTEGER
;
END
dbms_random;