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;
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:
Auteur: Michel Preti
Révision: 1.1
Vous ne pouvez pas commenter cet enregistrement