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
/