TP3 PLSQL Correction .pdf
Ce document au format PDF 1.4 a été généré par Microsoft Word - TP3 PLSQL corrigé.docx / ScanSoft PDF Create! 5, et a été envoyé sur fichier-pdf.fr le 16/03/2012 à 07:12, depuis l'adresse IP 197.28.x.x.
La présente page de téléchargement du fichier a été vue 5301 fois.
Taille du document: 52 Ko (3 pages).
Confidentialité: fichier public
Aperçu du document
TP3 PL/SQL
On rappelle la table "clients" suivante :
Num : clé primaire, entier, 3 chiffres
Solde : réel
Nom : chaîne de caractères (longueur 30)
Prénom : chaîne de caractères (longueur 30)
Ecrivez un block PL/SQL permettant de :
1.
Utilisation les propriétés des curseurs implicites :
Créer un programme qui augmente les soldes inférieurs à 300 de 5%. Afficher
le nombre d’enregistrements modifiés. Gérer l’exception associée si aucun
enregistrement n’est trouvé.
declare
v_row_updated number;
exp1 exception;
begin
update clients set solde=solde*1.05
where solde<300;
v_row_updated:= sql%rowcount;
if v_row_updated=0 then
raise exp1;
end if;
dbms_output.put_line('Le nombre d"enregistrements mis à jour
est: '||v_row_updated);
exception
when exp1 then
dbms_output.put_line('Pas d"enregistrements mis à jour');
end;
2.
Utilisation des curseurs explicites :
Créer une procédure qui affiche les coordonnées des clients ayant des soldes
inférieurs à 800. Utiliser deux méthodes pour parcourir le curseur : utiliser
dans un premier temps la boucle for et loop puis dans un deuxième temps,
utiliser le mot clé fetch. Gérer les éventuelles exceptionnelles rencontrées.
1
CREATE OR REPLACE PROCEDURE liste_nom_clients1
IS
BEGIN
DECLARE
e_exp1 EXCEPTION;
v_nblignes number:=0;
v_number number;
CURSOR c_nom_clients IS
select nom,prenom, solde from clients where solde<800;
BEGIN
FOR le_client IN c_nom_clients LOOP
v_nblignes:= v_nblignes+1;
dbms_output.put_line('--- Nom: ' || UPPER(le_client.nom) ||'--- Prénom : ' ||
le_client.prenom
|| '--- Solde :' || le_client.solde);
END LOOP;
if v_nblignes=0
then raise e_exp1;
end if;
EXCEPTION
WHEN e_exp1 THEN dbms_output.put_line(' ---- aucune donnée trouvée ---- ' );
END;
END;
CREATE OR REPLACE PROCEDURE liste_nom_clients2
IS
BEGIN
DECLARE
v_number number;
e_exp1 EXCEPTION;
CURSOR c_nom_clients IS
select nom,prenom, solde from clients where solde<800;
/*v_nom varchar2(30);
v_prenom varchar2(30);
v_solde number;
ou*/
v_le_client c_nom_clients%rowtype;
BEGIN
OPEN c_nom_clients;
LOOP
--FETCH c_nom_clients INTO v_nom, v_prenom, v_solde;
-- ou
FETCH c_nom_clients INTO v_le_client;
v_number:= c_nom_clients%rowcount;
IF v_number=0 THEN
RAISE e_exp1;
END IF;
EXIT WHEN c_nom_clients%NOTFOUND ;
/*dbms_output.put_line('--- Nom: ' || UPPER(v_nom) ||'--- Prénom : ' ||
v_prenom
|| '--- Solde :' || v_solde);
ou*/
2
dbms_output.put_line('--- Nom: ' || UPPER(v_le_client.nom) ||'--- Prénom :
' || v_le_client.prenom
|| '--- Solde :' || v_le_client.solde);
END LOOP;
CLOSE c_nom_clients;
EXCEPTION
WHEN e_exp1 THEN dbms_output.put_line(' ---- aucune donnée trouvée ---- '
);
END;
END;
/
3.
Utilisation des curseurs paramétrés :
Créer un programme qui affiche toutes les données d’un numéro d’employé
donné. Gérer les éventuelles exceptionnelles rencontrées.
DECLARE
v_number number;
e_exp1 EXCEPTION;
CURSOR c_clients(numero number) IS
SELECT * FROM clients WHERE num=numero;
v_client c_clients%ROWTYPE;
BEGIN
v_number:=&val_a_donner;
OPEN c_clients(v_number);
LOOP
FETCH c_clients INTO v_client;
IF c_clients%NOTFOUND THEN
RAISE e_exp1;
END IF;
EXIT WHEN c_clients%NOTFOUND ;
dbms_output.put_line('--- Nom: ' || UPPER(v_client.nom) ||'--- Prénom : ' ||
v_client.prenom
|| '--- Solde :' || v_client.solde);
END LOOP;
CLOSE c_clients;
EXCEPTION
WHEN e_exp1 THEN dbms_output.put_line(' ---- aucune donnée trouvée ---- ' );
END;
3


