Oracle

ID #1121

Génération de chaînes et de nombres aléatoires

1 - Génération d'un nombre réel aléatoire pour un intervalle
SELECT dbms_random.value (100,200)
FROM dual

2 - Génération d'un entier aléatoire pour un intervalle
SELECT trunc(dbms_random.value(0,100))
FROM dual
CONNECT BY level <= 10

3 - Génération d'une chaîne de caractères
Format de chaîne possible :
'u' ou 'U' chaîne en majuscules.
'l' ou 'L' chaîne en minuscules.
'a' ou 'A' chaîne en majuscules et minuscules.
'x' ou 'X' chaîne en alpha-numérique en majuscules.
'p' ou 'P' chaîne de tout type de caractères.
...avec la longueur de la chaîne à générer.

Exemple de 5 chaînes de 20 caractères; pour chaque format
SELECT dbms_random.string('U', 20) FROM dual
UNION ALL
SELECT dbms_random.string('l', 20) FROM dual
UNION ALL
SELECT dbms_random.string('A', 20) FROM dual
UNION ALL
SELECT dbms_random.string('X', 20) FROM dual
UNION ALL
SELECT dbms_random.string('P', 20) FROM dual

4 - Génération d'une date aléatoire
SELECT TO_DATE('01/01/14', 'DD/MM/RR') + TRUNC(dbms_random.value(0,365)) AS rnd
FROM dual

5 - Génération de données de tests aléatoires, pour insérer dans une table
Exemple ici avec une table fictive TEST.EMPLOYEE :

5a--Création de la table
CREATE TABLE TEST.EMPLOYEE (
idemployee  NUMBER(15),
txnom       VARCHAR2(100),
txprenom    VARCHAR2(100),
dtentree    DATE,
mtsalaire   NUMBER(12,2));

5b--Création d'une séquence TEST.SEQ_EMPLOYEE
CREATE SEQUENCE TEST.SEQ_EMPLOYEE INCREMENT BY 1 MAXVALUE 999999999999999 MINVALUE 1 NOCACHE;

5c--Grant (si nécessaire) :
GRANT SELECT, INSERT ON TEST.EMPLOYEE TO PUBLIC;
GRANT SELECT ON TEST.SEQ_EMPLOYEE TO PUBLIC;

5d--Insertions de 100 ligne de données aléatoires :
INSERT INTO TEST.EMPLOYEE (idemployee, txnom, txprenom, dtentree, mtsalaire)
SELECT
TEST.SEQ_EMPLOYEE.NEXTVAL,
dbms_random.string('A', trunc(dbms_random.value(5, 30))),
dbms_random.string('A', trunc(dbms_random.value(5, 30))),
to_date('01/01/1980', 'DD/MM/YY') + trunc(dbms_random.value(0, (20*365))),
dbms_random.value(1500, 6500)
FROM dual
CONNECT BY LEVEL < 100;

5e-- Contrôller ensuite les données :
SELECT * FROM TEST.EMPLOYEE;

Tags: chaînes nombres dates aléatoires dbms_random

Related entries:

Dernière mise à jour: 2014-04-29 10:55
Auteur: Michel Preti
Révision: 1.1

Digg it! Imprimer cet article Envoyer à un ami version PDF
Propose a translation for Propose a translation for
Merci de noter cette entrée:

Moyenne des notes: 1 sur 5 (1 Votes)

complètement inutile 1 2 3 4 5 indispensable

Vous ne pouvez pas commenter cet enregistrement