Alimenter une base RO

Question

Initialiser les tables client et produit avec les données de votre choix (au moins deux clients et deux produits).

1
-- Exemple de données insérées dans la table client
2
SELECT c.num||';'||c.nom||';'||c.prenom||';'||c.adresse
3
FROM Client c;
4
-----------------------------------
5
1;Colomb;Christophe;4, rue Liberté 
6
2;Bernard;Morin;120, square Zola
7
-----------------------------------
8
9
-- Exemple de données insérées dans la table produit
10
SELECT p.num||';'||p.designation||';'||p.prix||';'||p.stock 
11
FROM Produit p;
12
-----------------------------------
13
1;DVD Matrix;23,5;100 
14
2;DVD The Hobbit;49,3;100 
15
3;CD Album Yanni;25,9;100
16
-----------------------------------

Indice

Effectuez l'insertion comme en relationnel.

Solution

1
INSERT INTO Client (num, nom, prenom, adresse, date_nais, tel, sexe) 
2
VALUES (1, 'Colomb', 'Christophe', '4, rue Liberté', to_date('01091451', 'DDMMYYYY'), '0812456589' , 'm');
3
4
INSERT INTO Client (num, nom, prenom, adresse, date_nais, tel, sexe) 
5
VALUES (2, 'Morin', 'Bernard', '120, square Zola', to_date('27051931', 'DDMMYYYY'), '0126483621' , 'm');
6
7
INSERT INTO Produit (num, designation, prix, stock)
8
VALUES (1, 'DVD Matrix', 23.5, 100) ;
9
10
INSERT INTO Produit (num, designation, prix, stock)
11
VALUES (2, 'DVD The Hobbit', 49.3, 100) ;
12
13
INSERT INTO Produit (num, designation, prix, stock)
14
VALUES (3, 'Album Yanni', 25.9, 100) ;

Question

Initialiser la BD avec les données de votre choix (deux factures de deux lignes chacune au moins).

1
-- Exemple de données insérées dans la table facture
2
SELECT f.num||';'||f.fkclient.nom||';'||f.date_etabli||';'||l.fkproduit.designation||';'||l.qte 
3
FROM Facture f, TABLE(f.lignes_facture) l;
4
--------------------------------------------
5
1;Colomb;27/05/14;DVD Matrix;3 
6
1;Colomb;27/05/14;DVD The Hobbit;2 
7
2;Colomb;27/05/14;DVD The Hobbit;6 
8
2;Colomb;27/05/14;DVD Matrix;1
9
3;Bernard;27/05/14;CD Album Yanni;1
10
-----------------------------------

Indice

Récupérer les OID pour insérer les références aux produits et clients.

Indice

Utiliser les constructeurs d'objet pour insérer les lignes de facture.

Indice

Utiliser du code PL/SQL est souvent plus simple pour manipuler les OID, et donc dans le cas présent pour instancier des factures.

1
DECLARE
2
  ref_client_1 REF typClient; 
3
  ...
4
BEGIN
5
  SELECT REF(c) INTO ref_client_1
6
  FROM Client c
7
  WHERE c.num=1;
8
  ...
9
  INSERT INTO Facture (num, date_etabli, lignes_facture, fkClient) 
10
  VALUES (
11
    1, 
12
    SYSDATE,
13
    typLignesFacture(
14
      typLigneFacture(ref_produit_1,3),
15
    ...
16
  );
17
   ...
18
END ;
19
/

Solution

1
DECLARE
2
  ref_client_1 REF typClient;
3
  ref_client_2 REF typClient;
4
  ref_produit_1 REF typProduit;
5
  ref_produit_2 REF typProduit;
6
  ref_produit_3 REF typProduit;
7
8
BEGIN
9
  SELECT REF(c) INTO ref_client_1
10
  FROM Client c
11
  WHERE c.num=1;
12
13
  SELECT REF(c) INTO ref_client_2
14
  FROM Client c
15
  WHERE c.num=2;
16
17
  SELECT REF(p) INTO ref_produit_1
18
  FROM Produit p
19
  WHERE p.num=1;
20
21
  SELECT REF(p) INTO ref_produit_2
22
  FROM Produit p
23
  WHERE p.num=2;
24
25
  SELECT REF(p) INTO ref_produit_3
26
  FROM Produit p
27
  WHERE p.num=3;
28
29
  INSERT INTO Facture (num, date_etabli, lignes_facture, fkClient) 
30
  VALUES (
31
    1, 
32
    SYSDATE,
33
    typLignesFacture(
34
      typLigneFacture(ref_produit_1,3),
35
      typLigneFacture(ref_produit_2,2)), 
36
    ref_client_1
37
  );
38
39
  INSERT INTO Facture (num, date_etabli, lignes_facture, fkClient) 
40
  VALUES (
41
    2, 
42
    SYSDATE, 
43
    typLignesFacture(
44
      typLigneFacture(ref_produit_2,6),
45
      typLigneFacture(ref_produit_1,1)), 
46
    ref_client_1
47
  );
48
49
  INSERT INTO Facture (num, date_etabli, lignes_facture, fkClient) 
50
  VALUES (
51
    3, 
52
    SYSDATE, 
53
    typLignesFacture(
54
      typLigneFacture(ref_produit_3,1)), 
55
    ref_client_2
56
  );
57
58
END;
59
/