Base de donees

janvier 8, 2019 Non Par admin

Curseurs: A?chage d’informations

Feuille de TD4 Bases de donn´es relationnelles e langage PL/SQL R.Chiky, Z. Kazi Aoul, M. Manceny
14 avril 2010
Nous rappelons ici le sch´ma de la base dedonn´es impl´ment´e en TP: e e e e

Ecrivez un bloc PL/SQL qui permet de connaˆ ?tre les cinq ouvrages les plus emprunt´s. L’utilisateur verra a?ch´: e e Numero Numero Numero Numero Numero 1: 2: 3: 4: 5:isbn isbn isbn isbn isbn : : : : : 126578753 676809876 987654398 876098790 546782333

1.1

Correction

DECLARE CURSOR couvrages IS SELECT isbn, count(*) AS NombreEmprunts FROM details GROUP BYisbn ORDER BY 2 DESC; vouvrage couvrages%rowtype; i number; BEGIN OPEN couvrages; i:=0; LOOP i:=i+1; EXIT WHEN i>5; FETCH couvrages INTO vouvrage; EXIT WHEN couvrages%notfound;DBMS_OUTPUT.PUT_LINE(’Numero: ’||i||’ isbn:’ || vouvrage.isbn); END LOOP; CLOSE couvrages; END; /

2

Fonctions: Dur´e moyenne e

Figure 1: Sch´ma de la base de donn´es e e A partir de ce sch´ma, r´pondez auxexercices PL/SQL suivants: e e

Ecrivez une fonction dureeMoyenne qui accepte en param`tre un num´ro e e d’ISBN et ´ventuellement un num´ro d’exemplaire et qui retourne, soit la dur´e e e e moyenned’emprunt de l’ouvrage (seul le num´ro d’ISBN est connu), soit la e dur´e moyenne d’emprunt de l’exemplaire dans le cas o` l’on connait la num´ro e u e d’ISBN et le num´ro d’exemplaire. e

2.1Correction

CREATE OR REPLACE FUNCTION dureeMoyenne( 1 2

visbn in number, vexemplaire in number default null) RETURN number IS vduree number; BEGIN IF (vexemplaire is null) THEN SELECTAVG(rendule-creele) INTO vduree FROM emprunts, details WHERE emprunts.numero=details.emprunt AND details.isbn=visbn AND rendule is not null; ELSE SELECT AVG(rendule-creele) INTO vduree FROM emprunts, details WHEREemprunts.numero=details.emprunt AND details.isbn=visbn AND details.exemplaire=vexemplaire AND rendule is not null; END IF; RETURN vduree; END; /

WHERE isbn=visbn AND exemplaire=vnumero ; IF…