Inhaltsverzeichnis
Oracle PL/SQL - Zufall in der Datenbank - DBMS_RANDOM für die Generierung von Testdaten einsetzen
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.
Anwendung
Numerische Zahl VON - BIS erzeugen
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.
Strings 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:
- 'u', 'U' - returning string in uppercase alpha characters
- 'l', 'L' - returning string in lowercase alpha characters
- 'a', 'A' - returning string in mixed case alpha characters
- 'x', 'X' - returning string in uppercase alpha-numeric characters
- 'p', 'P' - returning string in any printable characters.
Otherwise the returning string is in uppercase alpha characters.
demnächst mehr
Quellen
12c Database PL/SQL Packages and Types Reference