1. Métodos
Los procedimientos y funciones que incluye este paquete son:1.1 INITIALIZE
Inicializa el valor de la semilla del generador de números aleatorios. EXEC dbms_random.initialize(12345678);
1.2 NORMAL
Devuelve números aleatorios siguiendo un distribución normal. SELECT dbms_random.normal
FROM dual;
-- Sólo valores positivos
SELECT ABS(dbms_random.normal)
FROM dual;
FROM dual;
-- Sólo valores positivos
SELECT ABS(dbms_random.normal)
FROM dual;
1.3 RANDOM
Genera números aleatorios. SET SERVEROUTPUT ON
DECLARE
aleator PLS_INTEGER;
semilla NUMBER(20);
BEGIN
SELECT hsecs
INTO semilla
FROM gv$timer;
dbms_random.initialize(semilla);
FOR i IN 1..10
LOOP
aleator := dbms_random.random;
dbms_output.put_line(aleator);
semilla := aleator;
END LOOP;
dbms_random.terminate;
END;
-- Genera números positivos entre 1 y 100
SELECT (1+ABS(MOD(dbms_random.random,100)))
FROM dual;
DECLARE
aleator PLS_INTEGER;
semilla NUMBER(20);
BEGIN
SELECT hsecs
INTO semilla
FROM gv$timer;
dbms_random.initialize(semilla);
FOR i IN 1..10
LOOP
aleator := dbms_random.random;
dbms_output.put_line(aleator);
semilla := aleator;
END LOOP;
dbms_random.terminate;
END;
-- Genera números positivos entre 1 y 100
SELECT (1+ABS(MOD(dbms_random.random,100)))
FROM dual;
1.4 SEED
Reinicializa el valor de la semilla EXEC dbms_random.seed(87654321);
1.5 STRING
Crea una cadena de caracteres aleatoria. La definición de la función es como sigue, dbms_random.string(opcion IN CHAR, longitud IN NUMBER), donde opción puede tomar los valores:- 'a' o 'A': Genera una cadena aleatoria con sólo letras íncluyendo mayúsculas y minúsculas.
- 'l' o 'L': Genera una cadena aleatoria con sólo letras minúsculas.
- 'p' o 'P': Genera una cadena aleatoria con cualquier tipo de carácter imprimible.
- 'u' o 'U': Genera una cadena aleatoria con sólo letras mayúsculas.
- 'x' o 'X': Genera una cadena aleatoria con caracteres alfa numéricos en mayúsculas.
-- Genera una cadena de 10 caracteres formada
-- por letras mayúsculas y minúsculas
SELECT dbms_random.string('A', 10)
FROM dual;
-- por letras mayúsculas y minúsculas
SELECT dbms_random.string('A', 10)
FROM dual;
1.6 TERMINATE
Indica que hemos terminado de usar el paquete DBMS_RANDOM. dbms_random.terminate;
1.7 VALUE
Sin parámetros devuelve un valor aleatorio entre 0 y 1 con un número fijo de decimales, pero también puede usarse con parametros para que devuelva números aleatorios entre un rango de numeros. SELECT dbms_random.value
FROM dual;
-- Develve números aleatorios entre 10 y 20
SELECT dbms_random.value(10, 20)
FROM dual;
FROM dual;
-- Develve números aleatorios entre 10 y 20
SELECT dbms_random.value(10, 20)
FROM dual;
2. Ejemplo
A continuación podéis ver un ejemplo de programa PL/SQL que genera números aleatorios entre 0 y 1 y que no utiliza el paquete DBMS_RANDOM DECLARE
semilla NUMBER;
BEGIN
semilla := EXP(TO_NUMBER(TO_CHAR(SYSDATE,'ss'))/59);
FOR i IN 1..10
LOOP
semilla := 1/(semilla - TRUNC(semilla));
semilla := semilla - TRUNC(semilla);
dbms_output.put_line(semilla);
END LOOP;
END;
semilla NUMBER;
BEGIN
semilla := EXP(TO_NUMBER(TO_CHAR(SYSDATE,'ss'))/59);
FOR i IN 1..10
LOOP
semilla := 1/(semilla - TRUNC(semilla));
semilla := semilla - TRUNC(semilla);
dbms_output.put_line(semilla);
END LOOP;
END;
Muy interesante. Tengo una página en inglés sobre DBMS_RANDOM en mi propio blog. Hay un vínculo a esta página al fin para hispanohablantes.
ResponderEliminar