culture
Utiliser des curseurs implicites et les exceptions prédéfinies 'TOO_MANY_ROWS' et 'NO_DATA_FOUND'.
DECLARE num_empl Empl.no_empl%TYPE := 'p23'; taux Empl.taux_h%TYPE;
BEGIN
SELECT taux_h INTO taux FROM Empl WHERE taux_h = 18.00;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUTLINE(‘autres employés ont déjà ce taux’)
WHEN NO_DATA_FOUND THEN
UPDATE Empl SET taux_h = 18.00 WHERE no_empl = num_empl;
END;
Exercice II : Le schéma de la base de données de REUSSITE est représenté comme suit :
CLI ( CODCLI, NOMCLI, ADRCLI, VILCLI, TELCLI, DROITTIMBRE, CATAEGFISC, MATFISC, TYPCLI, TXREMCLI, NUMEX, DATDEBEX, DATFINEX)
ART ( CODART, DESART, PRIXUNIT, MARQUE, DATPER, TXTVA, QTESTK, QTESTKMIN)
CDECLI (NUMCDE, CODCLI#, DATCDE, TOTAL_HT_CDE)
LCDECLI (NUMCDE, CODART#, QTECDE, DELLIVSOUH, TOTLIG)
BLCLI (NUMBL, DATBL, TOTAL_HT_BL, TVABL)
LBLCLI (NUMBL#, (NUMCDE, CODART)#, QTELIVR, PRIXUNIT, TXREMCLI, TXTVA)
(NUMCDE, CODART)# veut dire que LBLCLI fait référence à LCDECLI
Ecrire une procédure PL/SQL non stockée avec un seul paramètre en entrée : le code client, et qui permet de supprimer ce client ainsi que toutes les données qui lui sont associées dans les autres tables de la base.
Utilisez la bibliothèque DBMS_OUTPUT pour afficher les traces des données supprimées.
CREATE PROCEDURE supprimerClient (P_CODCLI CLI.CODCLI%TYPE) IS
NoBLASupprimer BLCLI.NUMBL%TYPE;
NoCdeASupprimer CDECLI.NUMCDE%TYPE;
-- Ce curseur détermine les numéros des livraisons à supprimer CURSOR lesNoLivraisonsASupprimer IS SELECT DISTINCT D.NUMBL FROM LBLCI D, CDECLI C WHERE C.NUMCDE = D.NUMCDE AND C.CODCLI = P_CODCLI;
-- Ce curseur détermine les