1. Mettre à jour la colonne Prix_total de la table ligne_commande Requête pour mettre à jour la colonne prix_total en fonction des quantite et prix_unitaire : UPDATE ligne_commande SET prix_total = quantite * ( SELECT prix_unitaire FROM produit WHERE produit.id = ligne_commande.produit_id ); 2. Implémenter les requêtes du TD select * from ligne_commande lc join commande c on lc.commande_id = c.id where client_id = 16; 3. Montant total dépensé par chaque client, classé par ordre décroissant SELECT client.prenom, client.nom, SUM(ligne_commande.prix_total) AS montant_total FROM client JOIN commande ON client.id = commande.client_id JOIN ligne_commande ON commande.id = ligne_commande.commande_id GROUP BY client.prenom, client.nom ORDER BY montant_total DESC; 4. Clients ayant dépensé plus de 2000 euros SELECT client.prenom, client.nom FROM client JOIN commande ON client.id = commande.client_id JOIN ligne_commande ON commande.id = ligne_commande.commande_id GROUP BY client.prenom, client.nom HAVING SUM(ligne_commande.prix_total) > 2000; 5. Chiffre d’affaires par mois SELECT TO_CHAR(commande.date_achat, 'YYYY-MM') AS mois_annee, SUM(ligne_commande.prix_total) AS chiffre_affaires FROM commande JOIN ligne_commande ON commande.id = ligne_commande.commande_id GROUP BY TO_CHAR(commande.date_achat, 'YYYY-MM') ORDER BY TO_CHAR(commande.date_achat, 'YYYY-MM'); 6. Création de la séquence seq_tp CREATE SEQUENCE seq_tp START WITH 121 INCREMENT BY 1; -- Afficher la valeur actuelle et suivante SELECT seq_tp.CURRVAL, seq_tp.NEXTVAL FROM dual; 7. Procédure sp_insert_ligne_commande Procédure pour insérer une ligne de commande en vérifiant l'existence de la commande et du produit : CREATE OR REPLACE PROCEDURE sp_insert_ligne_commande( p_commande_id INT, p_produit_id INT, p_quantite INT ) AS v_prix_unitaire NUMBER; BEGIN -- Vérifier l'existence de la commande et du produit IF NOT EXISTS (SELECT 1 FROM commande WHERE id = p_commande_id) THEN RAISE_APPLICATION_ERROR(-20001, 'Commande inexistante.'); END IF; IF NOT EXISTS (SELECT 1 FROM produit WHERE id = p_produit_id) THEN RAISE_APPLICATION_ERROR(-20002, 'Produit inexistant.'); END IF; -- Récupérer le prix unitaire SELECT prix_unitaire INTO v_prix_unitaire FROM produit WHERE id = p_produit_id; -- Insérer la ligne de commande INSERT INTO ligne_commande (id, commande_id, produit_id, quantite, prix_total) VALUES (seq_tp.NEXTVAL, p_commande_id, p_produit_id, p_quantite, p_quantite * v_prix_unitaire); END; / 8. Procédure sp_insert_commande Procédure pour insérer une commande avec vérification de l'existence du client : CREATE OR REPLACE PROCEDURE sp_insert_commande( p_client_id INT, p_reference VARCHAR2 ) AS BEGIN -- Vérifier l'existence du client IF NOT EXISTS (SELECT 1 FROM client WHERE id = p_client_id) THEN RAISE_APPLICATION_ERROR(-20003, 'Client inexistant.'); END IF; -- Insérer la commande INSERT INTO commande (id, client_id, date_achat, reference) VALUES (seq_tp.NEXTVAL, p_client_id, SYSDATE, p_reference); END; / 9. Procédure sp_frais_livraison Procédure pour calculer les frais de livraison selon le montant total d'une commande : CREATE OR REPLACE PROCEDURE sp_frais_livraison( p_commande_id INT, p_frais_livraison OUT NUMBER ) AS v_total_commande NUMBER; BEGIN -- Calculer le montant total de la commande SELECT SUM(prix_total) INTO v_total_commande FROM ligne_commande WHERE commande_id = p_commande_id; -- Calculer les frais de livraison IF v_total_commande >= 100 THEN p_frais_livraison := 0; ELSIF v_total_commande >= 50 THEN p_frais_livraison := 4; ELSE p_frais_livraison := 10; END IF; END; /