0% ont trouvé ce document utile (0 vote)
27 vues2 pages

Corrige DS PL SQL

Le document présente des exercices corrigés sur la programmation avancée en PL/SQL, incluant l'utilisation de curseurs, de procédures avec gestion d'exception, de fonctions de calcul, et de déclencheurs. Chaque exercice est accompagné d'une solution détaillée illustrant les concepts clés. Les corrections mettent en avant les bonnes pratiques de codage et la gestion des erreurs.

Transféré par

maram kouki
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
27 vues2 pages

Corrige DS PL SQL

Le document présente des exercices corrigés sur la programmation avancée en PL/SQL, incluant l'utilisation de curseurs, de procédures avec gestion d'exception, de fonctions de calcul, et de déclencheurs. Chaque exercice est accompagné d'une solution détaillée illustrant les concepts clés. Les corrections mettent en avant les bonnes pratiques de codage et la gestion des erreurs.

Transféré par

maram kouki
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

CORRIGÉ – DEVOIR SURVEILLÉ – PL/SQL : Programmation avancée

Exercice 1 : Curseur et traitement conditionnel (5 points)


Correction :

DECLARE
CURSOR c_employes IS SELECT id_emp, salaire FROM employés;
BEGIN
FOR emp IN c_employes LOOP
IF [Link] < 2000 THEN
UPDATE employés SET prime = 500 WHERE id_emp = emp.id_emp;
ELSIF [Link] BETWEEN 2000 AND 5000 THEN
UPDATE employés SET prime = 1000 WHERE id_emp = emp.id_emp;
ELSE
UPDATE employés SET prime = 1500 WHERE id_emp = emp.id_emp;
END IF;
END LOOP;
COMMIT;
END;

Exercice 2 : Procédure avec gestion d'exception (5 points)


Correction :

CREATE OR REPLACE PROCEDURE ajouter_client (


p_id_client IN NUMBER,
p_nom IN VARCHAR2,
p_ville IN VARCHAR2
) IS
e_client_existe EXCEPTION;
PRAGMA EXCEPTION_INIT(e_client_existe, -1);
BEGIN
INSERT INTO clients (id_client, nom, ville)
VALUES (p_id_client, p_nom, p_ville);
DBMS_OUTPUT.PUT_LINE('Client ajouté avec succès.');
EXCEPTION
WHEN e_client_existe THEN
DBMS_OUTPUT.PUT_LINE('Erreur : Le client existe déjà.');
END;

Exercice 3 : Fonction de calcul (5 points)


Correction :

CREATE OR REPLACE FUNCTION calculer_ttc(p_id_produit NUMBER) RETURN NUMBER IS


v_prix_ht produits.prix_ht%TYPE;
v_ttc NUMBER(8,2);
BEGIN
SELECT prix_ht INTO v_prix_ht FROM produits WHERE id_produit = p_id_produit;
v_ttc := v_prix_ht * 1.20;
RETURN v_ttc;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20001, 'Produit introuvable.');
END;

Exercice 4 : Déclencheur (Trigger) (5 points)


Correction :

CREATE OR REPLACE TRIGGER trg_update_stock


AFTER UPDATE OF quantite ON stock
FOR EACH ROW
BEGIN
INSERT INTO historique_stock (id_article, date_modif, ancienne_quantite, nouvelle_quantite)
VALUES (:OLD.id_article, SYSDATE, :[Link], :[Link]);
END;

Vous aimerez peut-être aussi