Vous êtes sur la page 1sur 2

CORRECTION

Exercice 1
Q1. Définir les types d'exceptions PL/SQL. (1.5 pt)
 Exceptions internes: prédéfinies par Oracle
 Exceptions anonymes.
 Exceptions externes: définies par l’utilisateur

Q2. Expliquer le but de %TYPE et %ROWTYPE (1 pt)


 %type: On peut déclarer qu’une variable est du même type qu’une colonne d’une table ou
d’une vue (ou qu’une autre variable) :
 %rowtype: Une variable peut contenir toutes les
colonnes d’une ligne d’une table

Q3. Expliquer les types des curseurs PL/SQL (2.5 pts)


 Implicite + explication
 Explicite + explication
Exercice 2 :
1. Créer la table "Poste" en respectant les propriétés suivantes : (2 pt)

CREATE TABLE Poste


(nPoste VARCHAR2(7),
nomPoste VARCHAR2(20) NOT NULL,
typePoste CHAR(9),
nSalle VARCHAR2(6),
CONSTRAINT pk_poste PRIMARY KEY (nPoste), constraint ck_type check(type in
('TX', 'UNIX', 'PCNT','PCWS' 'NC’));

2. Créer la table " PCpersonnel" ayant comme propriété numéro du poste et numéro de la salle à
partir de la table "Poste" dont le type représente un 'PC Windows NT' ou bien 'PC Windows'. :
(2pt)
CREATE TABLE PCSeuls (np, ns)
AS SELECT nPoste, nSalle
FROM Poste
WHERE typePoste = 'PCNT' OR typePoste = 'PCWS';

3. Augmenter de 90% le montant du prix des logiciels Bureautiques : (1pt)


UPDATE Logiciel SET prix = prix*0.9 WHERE typeLog = 'BU';
4. Ecrire un bloc PL/SQL permettant de chercher le nombre de poste ‘Terminal X-Window’ de la
salle numéro ‘A16’ et stocker le résultat dans une table ‘TResultat’ (2pt)
DECLARE
nbPoste NUMBER;
BEGIN
-- Extraction du nombre de postes
SELECT COUNT(*) INTO nbPoste
FROM Poste WHERE nSalle = 'A16' AND typePoste = 'TX';
-- stockage du résultat
INSERT INTO TResultat VALUES (nSalle, nbPoste) ;
END;

5. Réécrire le bloc PL/SQL de la question précédente sous forme de procédure permettant de


récupérer en sortie le nombre de poste selon les paramètres en entrée suivants : le type du
poste et le numéro de la salle. (2pt)
Create procedure nbpostes( Vtyposte in poste.typePoste%TYPE,
Vnsal in Salle.nSalle%TYPE,
Vpost out NUMBER)
IS
Begin
SELECT COUNT(*) INTO Vpost
FROM Poste WHERE nSalle = Vnsal AND typePoste = Vtyposte;
End;
/
Donner un exemple d’appel de cette procédure. (1pt)
DECLARE
T NUMBER ;
BEGIN
nbpostes(‘UNIX’,‘A16’,T);
Dbms_output.put_line(‘le nb poste est’|| to char(T);
END ;
6. Définir un curseur permettant de déterminer les informations relatives aux logiciels : noms du
logiciel, la date d’achat, date d’installation, nom du poste. (3 pt)
Declare
CURSOR c1 IS
SELECT l.nomLog, l.dateAch, p.nomPoste, i.dateIns,i.nLog, i.nPoste
FROM Installer i, Logiciel l, Poste p
WHERE i.nPoste = p.nPoste AND i.nLog = l.nLog;

var1 Logiciel.nomlog%type;
var2 Logiciel.dateAch%type;
var3 Poste.nomPoste%type;
var4 Installer.dateins%type;
var5 Poste.nposte%type;

Begin
Open c1;
loop
Fetch C1 into var1, var2, var3, var4, var5;
Exit when c1%notfound;
Close c1;
End;
/

7. Ecrire une fonction PL/SQL, qui calcule, pour un poste donné, le montant total des logiciels
installés. (2 pt)
Create function montantlog (vnposte in poste.Nposte%TYPE)
Return number
IS
V_sum number;
BEGIN
Select sum(prix) into v_sum
from installer i, logiciel l
where l.nlog =i.nlog;
Return (v_sum);
End montantlog;
/

Page 2 /2

Vous aimerez peut-être aussi