PHASE 3 1,57 ko
Newer Older
MOLINIER Hugo's avatar
MOLINIER Hugo a validé
-- 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;