execice 1 create or replace function fn_points_fidelite(Id_client Number) return Number IS V_pt_fidelite number; Begin Select sum(L.prix_total) Into V_pt_fidelite from ligne_Commande L, Commande CO where L.commande_id = CO.id AND CO.client_id = Id_client; V_pt_fidelite := floor(V_pt_fidelite/10); return V_pt_fidelite; Exception when No_data_found then return 0; end fn_points_fidelite; select fn_points_fidelite(16) from dual; declare cursor C_client IS Select id, nom from client; V_points number; Begin for v_client in c_client loop v_points := fn_points_fidelite(v_client.id); if (v_points < 2) then DBMS_OUTPUT.PUT_LINE(v_client.nom || 'à' || v_points || 'point de fidelité' ); else DBMS_OUTPUT.PUT_LINE(v_client.nom || 'à' || v_points || 'points de fidelités' ); end if; end loop; end; //-------------------------------------------------- select nom || 'à' || fn_points_fidelite(id) || case when fn_points_fidelite(id) < 2 then 'point de fidelité'; else 'points de fidelités'; end from client; //---------------!!!!!!!!!!!!!!!!!!!---------------------------- exercice 2 create or replace trigger trg_DeleteCommande Before delete on Commande for each row begin delete from ligne_commande L where L.commande_id = :old.id; end trg_DeleteCommande; ---------------------verification----------------------------- select * from Commande CO, ligne_commande L where CO.id = 16 AND CO.id = L.commande_id; ID CLIENT_ID DATE_ACHA REFERENCE ID COMMANDE_ID PRODUIT_ID QUANTITE PRIX_TOTAL ---------- ---------- --------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- ----------- ---------- ---------- ---------- 16 15 18-JAN-19 008974 33 16 2 4 400.4 delete Commande where id=16; select * from ligne_commande L where L.commande_id = 16; no rows selected exercice 3 create or replace trigger trg_DeleteClient Before delete on Client for each row begin delete from Commande CO where CO.client_id = :old.id; end trg_DeleteCommande; exercice 4 create table Client_His as select * from Client; delete from Client_His; create or replace trigger trg_DeleteClient before delete on Client for each row begin delete from Commande CO where CO.client_id = :old.id; insert into Client_His values (:old.id, :old.prenom, :old.nom, :old.email, :old.ville); end trg_DeleteCommande; exercice 5 la contrainte de suppression en cascade exercice 6 drop table Client cascade constraints; drop table Commande cascade constraints; drop table ligne_commande cascade constraints; CREATE TABLE client ( id INT PRIMARY KEY, prenom VARCHAR(255), nom VARCHAR(255), email VARCHAR(255), ville VARCHAR(255) ); CREATE TABLE commande ( id INT PRIMARY KEY, client_id INT, date_achat DATE, reference VARCHAR(255), FOREIGN KEY (client_id) REFERENCES client(id) ON DELETE CASCADE ); CREATE TABLE ligne_commande ( id INT PRIMARY KEY, commande_id INT, produit_id INT, quantite INT, prix_total DECIMAL(10, 2), FOREIGN KEY (commande_id) REFERENCES commande(id) ON DELETE CASCADE, FOREIGN KEY (produit_id) REFERENCES produit(id) ); Exercice 7