Marouane RADDAOUI 3A41
SGBD ESPRIT
Test
Chapitre 1 : Les blocs anonymes (10 questions)
1. QCM. Quel mot-clé permet de lancer un bloc PL/SQL ?
A. BEGIN
B. EXECUTE
C. RUN
D. OPEN
2. Vrai ou Faux. Un bloc anonyme peut être stocké en base.
3. Correspondance. Associer les sections aux rôles :
DECLARE
BEGIN
EXCEPTION
END
/
4. Réponse à trous. Complétez le code suivant :
DECLARE
v_sal NUMBER := 3000;
BEGIN
DBMS_OUTPUT.PUT_LINE('Salaire: ' || ______);
END;
5. Composition (Code à corriger). Corrigez le code suivant :
BEGIN
v_num := 100;
DBMS_OUTPUT.PUT_LINE(v_num);
END;
6. QCM Lequel de ces éléments est optionnel dans un bloc PL/SQL ?
A. BEGIN
B. END
C. DECLARE
D. Aucun des éléments
7. Vrai ou Faux. On peut afficher un message dans un bloc anonyme avec
DBMS_OUTPUT.PUT_LINE.
8. Hotspot (à adapter) Dans le bloc suivant, identifiez la ligne qui cause une erreur de
syntaxe :
x NUMBER
BEGIN
x := 10;
DBMS_OUTPUT.PUTLINE(x);
END;
9. Valeur numérique. Quel sera le résultat de l’exécution suivante ?
Marouane RADDAOUI 3A41
SGBD ESPRIT
DECLARE
a NUMBER := 10;
b NUMBER := 5;
BEGIN
DBMS_OUTPUT.PUTLINE(a * b);
END;
10. Code à trous. Complétez pour afficher "Bonjour PL/SQL" :
DECLARE
msg VARCHAR2(20) := 'Bonjour PL/SQL';
BEGIN
DBMS_OUTPUT.PUT(____);
END;
Chapitre 2 : Les curseurs (10 questions)
11. QCM Quel type de curseur doit être déclaré manuellement ?
A. Implicite
B. Automatique
C. Explicite
D. Interne
12. Vrai ou Faux. Un curseur doit toujours être fermé après utilisation.
13. Code à corriger Corrigez le code pour qu'il affiche les noms d'employés :
DECLARE
CURSOR c_emp IS SELECT name FROM employees;
emp_name [Link]%TYPE;
BEGIN
OPEN c_emp;
FETCH emp_name INTO c_emp;
DBMS_OUTPUT.PUT(emp_name);
CLOSE c_emp;
END;
14. Correspondance
Associez chaque étape du curseur à son action :
OPEN
FETCH
CLOSE
DECLARE
15. QCM
Que permet l’attribut %NOTFOUND ?
A. Vérifie si le curseur a été ouvert
B. Vérifie s’il reste des lignes
C. Vérifie si la dernière récupération a échoué
D. Vérifie si la boucle est terminée
16. Réponse à trous
Complétez la boucle suivante :
DECLARE
Marouane RADDAOUI 3A41
SGBD ESPRIT
CURSOR c IS SELECT emp_id FROM employees;
v_id employees.emp_id%TYPE;
BEGIN
OPEN c;
LOOP
FETCH c INTO v_id;
EXIT WHEN ___________;
DBMS_OUTPUT.PUT(v_id);
END LOOP;
CLOSE c;
END;
17. Code à compléter
Complétez ce bloc pour afficher tous les noms des départements :
CURSOR cur_dep IS SELECT dept_name FROM departments;
v_name departments.dept_name%TYPE;
BEGIN
OPEN cur_dep;
LOOP
FETCH cur_dep INTO v_name;
EXIT WHEN cur_dep%______;
DBMS_OUTPUT.PUTv_name);
END LOOP;
CLOSE cur_dep;
END;
18. Vrai ou Faux
Un curseur peut être utilisé avec une boucle FOR directement sans ouverture explicite.
→ Vrai
19. QCM
Laquelle des boucles suivantes est compatible avec un curseur ?
A. WHILE
B. FOR
C. LOOP
D. Toutes les réponses
20. Valeur numérique
Si une table contient 5 lignes, combien de fois le FETCH sera-t-il exécuté dans une
boucle classique ?
→ Réponse : 5
Chapitre 3 : Les sous-programmes (procédures et fonctions) (10 questions)
21. QCM
Laquelle de ces affirmations est vraie ?
A. Une fonction ne peut pas retourner de valeur
B. Une procédure retourne toujours une valeur
C. Une fonction retourne une valeur
D. Une procédure est appelée dans une expression
22. Vrai ou Faux
Une fonction PL/SQL peut être utilisée dans une requête SQL.
→ Vrai
Marouane RADDAOUI 3A41
SGBD ESPRIT
23. Code à corriger
Corrigez cette fonction erronée :
CREATE FUNCTION double_val(x IN NUMBER)
RETURN x*2;
24. Réponse à trous
Complétez cette déclaration de procédure :
CREATE PROCEDURE affiche_msg(msg IN VARCHAR2)
IS
BEGIN
DBMS_OUTPUT.PUT(____);
END;
26. QCM
Lequel des types suivants est valide pour un paramètre OUT ?
A. VARCHAR2
B. BOOLEAN
C. TABLE
D. CURSOR
27. Vrai ou Faux
Une procédure peut modifier la valeur d’un paramètre OUT.
28. Code à compléter Complétez la fonction qui retourne le carré d’un nombre :
CREATE FUNCTION carre(x IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN x * ____;
END;
29. QCM Dans une procédure, que signifie un paramètre IN OUT ?
A. Valeur d’entrée uniquement
B. Valeur de sortie uniquement
C. Paramètre partagé lecture/écriture
D. Aucun
30. Composition (écriture libre) Écrivez une procédure nommée ajouter_salaire qui
prend en paramètre un salaire et l'affiche s’il est supérieur à 2000.