====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
* http://docs.oracle.com/database/121/ARPLS/d_random.htm#ARPLS040