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)
|