min. ab Oracle 7 ? - letzter Test mit Oracle 12c
Mit dem PL/SQL Package „DBMS_RANDOM“ lassen sich Zufallszahlen und -strings in der Datenbank erzeugen.
Das ist sehr hilfreich beim Erzeugen von Testdaten.
Seit 11g/12c ist es nicht mehr notwendig eine Seed vor dem Aufruf von DBMS_RANDOM zu setzen.
Mit „dbms_random.value ( low, high)“ Zahlen vom Typ NUMBER aus einer Menge von / bis erzeugen.
Mit „ceil“ lässt sich dann wieder ein Integer Wert daraus ermitteln.
Beispiel: Entweder eine 1 oder eine 2 erzeugen:
SELECT CEIL(dbms_random.value (0, 2)) FROM dual;
Wie ist die Verteilung der beiden Werte:
SELECT avg(val) , SUM(decode(val,1,1,0)) val_eq_1 , SUM(decode(val,2,1,0)) val_eq_2 , COUNT(*) FROM ( SELECT CEIL(dbms_random.value (0, 2)) AS val FROM dba_objects) / AVG(VAL) VAL_EQ_1 VAL_EQ_2 COUNT(*) ------------ ------------ ------------ ------------ 1.5015453097 47255 47548 94803 AVG(VAL) VAL_EQ_1 VAL_EQ_2 COUNT(*) ------------ ------------ ------------ ------------ 1.4997415694 47426 47377 94803
Das sieht dann so gar so einigermaßen gleichmäßig verteilt aus
Mit diesen Zahlen lässt sich dann rechnen und zum Beispiel ein zufälliges Datum erzeugen.
Mit „DBMS_RANDOM.string ( opt, len)“ wird ein String mit der Länge „len“ zurück gegeben. Mit dem „opt“ Parameter wird die Zeichensatz Menge, aus denen gewählt werden soll, gesetzt:
Aus der 12c Doku:
Otherwise the returning string is in uppercase alpha characters.
demnächst mehr
12c Database PL/SQL Packages and Types Reference