Bonjour à Tous !

Je suis nouveau ici dans ce Forum, et malheureusement ma première discussion sera pour poster une question et ne pas pour y répondre.

En fait, j'ai un problème au niveau d'une procédure PLSQL.

J'ai une question pour construire une Base de donnée et de la remplir avec
des proportions données . alors la, y'a pas mal de solutions pour y faire,
moi j'ai choisi de travailler avec une procédure PLSQL et tester pour chaque
champ

Voilà la question déjà :



Construire la base de données suivante :

Etudiants (No-etu, Nom-etu, Pnom-etu, Ville, Promotion, Date-nais, Commentaire)
Promotions (No-promo, Libelle-promo, Responsable, Niveau, Commentaire)

Remplir cette base de données à l’aide d’un programme PL/SQL, avec une proportion « contrôlée »
d’étudiants dans différentes villes et différentes promotions.
Les proportions visées sont :
- Pour Ville : Dijon (40%), Chenôve ( 25%), Talant (20%), Quetigny (10%), Chevigny (4%),
Bressey (1%)
- Pour Promotion : L1 MIE (27%), L1 PC (20%), L2 MIE (15%), L2 PC (10%), L2 MP (1%), L3
Chimie (5%), L3 Info (8%), L3 Elec (2%), L3 Méca (2%), L3 Phys (3%), L3 Math (7%)



et voilà la procédure que j'ai crée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
set serveroutput on;
CREATE OR REPLACE PROCEDURE Insertion
AS
BEGIN
v_ville varchar(30)
v_promotion varchar(30)

FOR i IN 1..500
LOOP
pct := DBMS_RANDOM.VALUE(0, 100);
IF pct < 40 then v_ville := 'Dijon';
ELSIF pct < 25 then v_ville := 'Chenôve';
ELSIF pct < 20 then v_ville := 'Talant';
ELSIF pct < 10 then v_ville := 'Quetigny';
ELSIF pct < 4 then v_ville := 'Chevigny';
ELSE v_ville := 'Bressey'; 
END IF;
 
pct := DBMS_RANDOM.VALUE(0, 100);
IF pct < 27 then v_promotion := 'L1 MIE';
ELSIF pct < 20 then v_promotion := 'L1 PC';
ELSIF pct < 15 then v_promotion := 'L2 MI2';
ELSIF pct < 10 then v_promotion := 'L2 PC';
ELSIF pct < 1 then v_promotion := 'L2 MP';
ELSIF pct < 5 then v_promotion := 'L3 Chimie';
ELSIF pct < 8 then v_promotion := 'L3 Info';
ELSIF pct < 2 then v_promotion := 'L3 Elec';
ELSIF pct < 2 then v_promotion := 'L3 Méca';
ELSIF pct < 3 then v_promotion := 'L3 Phys';
ELSE v_promotion := 'L3 Math'; 
END IF;

 
INSERT INTO ETUDIANT(No_etu,Nom_etu,Pnom_etu,Ville,Promotion,Date_nais,Commentaire)
VALUES (i,Nom_etu,Pnom_etu,v_ville,v_promotion,Date_nais,Commentaire);
 
  END LOOP;
--Validation
COMMIT;
END;
alors j'ai crée cette procédure qui teste pour les champs promotion et ville
les proportions données.

Alors le problèmes c'est que je ne c'est pas si c'est correcte ma solution ou
non ? ainsi que je ne sais pas si je dois entrer tout les variables dans l'entête
de la procédure ou juste les variables v_ville et v_promotion que je vais les
tester après ? aussi , est ce que je dois faire une INSERT INTO PROMOTION
en dessous de INSERT INTO ETUDIANT ?

Merci de me donner une solution , je suis vraiment coincé .

Merci d'avance.