Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_dbms_random_12c

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
prog:oracle_dbms_random_12c [2016/10/17 19:50]
gpipperr [Oracle PL/SQL - Zufall in der Datenbank - DBMS_RANDOM für die Generierung von Testdaten einsetzen]
prog:oracle_dbms_random_12c [2016/10/17 19:51] (aktuell)
gpipperr [Numerische Zahl von bis erzeugen]
Zeile 1: Zeile 1:
 +====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:
 +
 +<code sql>
 +select  ceil(dbms_random.value (0, 2)) from dual;
 +</code>
 +
 +Wie ist die Verteilung der beiden Werte:
 +<code sql>
 +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
 +</code>
 +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
"Autor: Gunther Pipperr"
prog/oracle_dbms_random_12c.txt · Zuletzt geändert: 2016/10/17 19:51 von gpipperr