Newer
Older
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
-- Type Ligne de Commande
CREATE OR REPLACE TYPE t_ligne_commande AS OBJECT (
quantite NUMBER,
ref_produit REF produit_typ
);
CREATE OR REPLACE TYPE t_table_ligne_commande AS TABLE OF t_ligne_commande;
/
CREATE OR REPLACE TYPE t_commande AS OBJECT (
id_commande NUMBER,
ref_client REF t_client, -- Référence au client
lignes t_table_ligne_commande
);
/
CREATE TABLE Commande OF t_commande (
PRIMARY KEY (id_commande))
NESTED TABLE lignes STORE AS lignes_tab_commande
/
DECLARE
v_ref_client REF t_client;
v_ref_livre REF produit_typ;
v_ref_casque REF produit_typ;
BEGIN
-- 1. Récupérer la référence du client (ID 1)
SELECT REF(c) INTO v_ref_client FROM client c WHERE c.id_utilisateur = 1;
SELECT REF(p) INTO v_ref_livre FROM produits p WHERE p.sku = 'L001';
SELECT REF(p) INTO v_ref_casque FROM produits p WHERE p.sku = 'E001';
INSERT INTO Commande VALUES (
T_COMMANDE(
101,
v_ref_client,
-- Appelez le constructeur en MAJUSCULES
T_TABLE_LIGNE_COMMANDE(
T_LIGNE_COMMANDE(2, v_ref_livre),
T_LIGNE_COMMANDE(1, v_ref_casque)
)
)
);
COMMIT;
END;
/
--SELECTE Par Produit
SELECT id_commande, DEREF(c.REF_CLIENT).nom,date_commande,DEREF(l.ref_produit).nom AS "NOM_PRODUIT" ,(l.quantite) * l.ref_produit.get_prix_ttc() AS PRIX
FROM Commande c,TABLE(c.lignes) l
--Mofifie pour voir si bien lié à l'objet
UPDATE client c
SET c.email = 'test@gmail.commodif'
WHERE c.id_utilisateur = 1;