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