viernes, 1 de agosto de 2008

¿Cómo generar una fecha aleatoria con PL/SQL?

El paquete dbms_random implementa algunas funciones aleatorias de utilidad para generar números y strings aleatorios, pero no para fechas. Para generar fechas al azar, podemos sumar o restar una cantidad X de días a sysdate. El único detalle respecta al período de fechas que queremos obtener, debemos ajustar adecuadamente el número de días que se van a sumar/restar a la fecha actual.
CREATE TABLE fechas_aleatorias (fecha DATE);

DECLARE
sd NUMBER;
dias NUMBER := 5000; --max de dias que se suman/restan a sysdate
dia DATE;
BEGIN
-- inicializacion del seed
SELECT to_char(systimestamp,'FF') INTO sd FROM dual;
dbms_random.initialize(sd);

FOR i in 1..10000
LOOP
dia := TRUNC(sysdate) + dbms_random.value(-dias,dias);
INSERT INTO fechas_aleatorias VALUES (dia);
END LOOP;
END;