VALORES ALEATORIOS EN PL/SQL. DBMS_RANDOM.VALUE

       Imaginemos que queremos generar ciertos valores aleatorios. A continuación indico las generaciones aleatorias que más uso.


Obtener un listado aleatorio en PL/SQL de alguna tabla

          
                      	 
 select *
 from tabla  t
 where .....
 ORDER BY dbms_random.value;
                				 
                		


Obtener un único registro aleatorio en PL/SQL de alguna de nuestras tablas.

          
                      	 
-- Un solo valor			
FROM (SELECT valor_campo
          FROM tabla
      ORDER BY DBMS_RANDOM.VALUE)
 WHERE ROWNUM = 1;
 
 
 -- Todo el registro				
 SELECT *
  FROM tabla T
       (SELECT clave
          FROM tabla 
      ORDER BY DBMS_RANDOM.VALUE) subtabla
 WHERE t.clave = subtabla.clave
   AND ROWNUM = 1; 
                				 
                		


Crear fecha aleatoria de los últimos 100 días por ejemplo.

          
                      	 
 select sysdate-round(dbms_random.value(0,100),0)
 from dual;
                				 
                		


Generar número de forma aleatoria.

          
                      	 
-- Números negativos y positivos
SELECT DBMS_RANDOM.random FROM dual;

-- Números positivos
SELECT ABS(DBMS_RANDOM.random) FROM dual;

--Bueno pero queremos especificar el rango en el que estén esos números.
SELECT DBMS_RANDOM.VALUE(1,30) FROM dual;

-- Número no deciales
SELECT ROUND(DBMS_RANDOM.VALUE(1,10)) FROM dual;
                				 
                		


La siguiente función la he experimentado hace bastante poco. No la conocía y me ha sorprendido.
Generar una cadena aleatoriamente.

          
                      	 
SELECT DBMS_RANDOM.string('L', 10) FROM dual;
                				 
                		

El primer parámetros tiene el siguiente significado:

  • 'a','A' alpha characters only (mixed CASE)
  • 'l','L' LOWER CASE alpha characters only
  • 'p','P' ANY printable characters
  • 'u','U' UPPER CASE alpha characters only
  • 'x','X' ANY alpha-numeric characters (UPPER)