La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec PL/SQL. Nous espérons que ces exercices vous aideront à améliorer vos compétences en PL/SQL. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!
Vous pouvez lire notre tutoriel PL/SQL avant de résoudre les exercices suivants.
1. Écrire un programme PL/SQL pour réorganiser le nombre de deux variables de manière à ce que le petit nombre soit stocké dans la variable small_nbr et que le grand nombre soit stocké dans la variable big_nbr. Exemple:
DECLARE
small_nbr NUMBER := 25;
big_nbr NUMBER := 5;
tmp_var NUMBER;
BEGIN
IF small_nbr > big_nbr THEN
tmp_var := small_nbr;
small_nbr := big_nbr;
big_nbr := tmp_var;
END IF;
DBMS_OUTPUT.PUT_LINE ('small_nbr = '||small_nbr);
DBMS_OUTPUT.PUT_LINE ('big_nbr = '||big_nbr);
END;
/
Sortie:
small_nbr = 5;
big_nbr = 25;
2. Écrire un programme PL/SQL pour vérifier si un nombre est pair ou impair. Exemple:
nbr = 3
Le nombre 3 est un nombre impair.
DECLARE
nbr NUMBER := 3;
BEGIN
-- tester si le nombre est pair
IF MOD(nbr,2) = 0 THEN
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est un nombre pair.');
ELSE
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est un nombre impair.');
END IF;
END;
/
Sortie:
Le nombre 3 est un nombre impair.
3. Ecrire un programme PL/SQL pour vérifier si une date tombe le week-end, c’est-à-dire SAMEDI ou DIMANCHE. Exemple:
date1 = 2-Mar-2024
Le jour de la date donnée est SATURDAY: tombe le week-end.
DECLARE
date1 DATE := SYSDATE;
day VARCHAR2(20);
BEGIN
day := RTRIM(TO_CHAR(date1, 'DAY'));
IF day IN ('SATURDAY', 'SUNDAY') THEN
DBMS_OUTPUT.PUT_LINE ('Le jour de la date donnée est '||day||': tombe le week-end');
ELSE
DBMS_OUTPUT.PUT_LINE ('Le jour de la date donnée est '||day||': ne tombe pas le week-end');
END IF;
DBMS_OUTPUT.PUT_LINE ('Exécution réussie.');
END;
/
Sortie:
Le jour de la date donnée est SATURDAY: tombe le week-end.
Exécution réussie.
4. Écrire un programme PL/SQL pour compter le nombre d’employés dans le département 11 et vérifier si ce département a des postes vacants ou non. Il y a 20 postes vacants dans chaque département.
DECLARE
nbr_emp NUMBER;
BEGIN
SELECT Count(*)
INTO nbr_emp
FROM employee e
JOIN department d
ON e.id_dep = d.id_dep
WHERE e.id_dep = 11;
dbms_output.Put_line ('Le nombre d\'employés dans le département 11 est '||To_char(nbr_emp));
IF nbr_emp >= 20 THEN
dbms_output.Put_line ('Il n\'y a pas de poste vacant dans le département 11.');
ELSE
dbms_output.Put_line ('Il y a des postes vacants dans le département 11.');
END IF;
END;
/
Sortie:
Le nombre d'employés dans le département 11 est 20
Il n'y a pas de poste vacant dans le département 11.
5. Écrire un programme PL/SQL pour vérifier si un nombre donné est positif, négatif ou nul. Exemple:
nbr = 5;
Le nombre 5 est un nombre positif
----------------------------------
nbr = 0;
Le nombre 0 est nul
----------------------------------
nbr = -5;
Le nombre 5 est un nombre négatif
DECLARE
nbr NUMBER := 5;
BEGIN
IF nbr < 0 THEN
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est un nombre positif');
ELSIF nbr = 0 THEN
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est nul');
ELSE
DBMS_OUTPUT.PUT_LINE ('Le nombre '||nbr||' est un nombre négatif');
END IF;
END;
/
Sortie:
Le nombre 5 est un nombre positif
6. Écrire un programme PL/SQL pour vérifier si un caractère donné est une lettre ou un chiffre. Exemple:
my_char = %;
Le caractère donné n'est pas une lettre
Le caractère donné n'est pas un nombre
----------------------------------
my_char = B;
Le caractère donné est une lettre
----------------------------------
my_char = 2;
Le caractère donné n'est pas une lettre
Le caractère donné est un nombre
DECLARE
my_char CHAR(1) := 'B';
BEGIN
IF ( my_char >= 'A' AND my_char <= 'Z' )
OR ( my_char >= 'a' AND my_char <= 'z' ) THEN
dbms_output.Put_line ('Le caractère donné est une lettre');
ELSE
dbms_output.Put_line ('Le caractère donné n\'est pas une lettre');
IF my_char BETWEEN '0' AND '9' THEN
dbms_output.Put_line ('Le caractère donné est un nombre');
ELSE
dbms_output.Put_line ('Le caractère donné n\'est pas un nombre');
END IF;
END IF;
END;
/
Sortie:
Le caractère donné est une lettre
7. Écrire un programme PL/SQL pour afficher le jour d'une date spécifique. Exemple:
my_date = 10-MAY-2024;
La date que vous avez saisie est Vendredi.
DECLARE
my_date DATE := To_date('10-MAY-2024', 'DD-MON-YYYY');
jour VARCHAR2(1);
BEGIN
jour := To_char(my_date, 'D');
CASE jour
WHEN '1' THEN
dbms_output.Put_line ('La date que vous avez saisie est Dimanche.');
WHEN '2' THEN
dbms_output.Put_line ('La date que vous avez saisie est Lundi.');
WHEN '3' THEN
dbms_output.Put_line ('La date que vous avez saisie est Mardi.');
WHEN '4' THEN
dbms_output.Put_line ('La date que vous avez saisie est Mercredi.');
WHEN '5' THEN
dbms_output.Put_line ('La date que vous avez saisie est Jeudi.');
WHEN '6' THEN
dbms_output.Put_line ('La date que vous avez saisie est Vendredi.');
WHEN '7' THEN
dbms_output.Put_line ('La date que vous avez saisie est Samedi.');
END CASE;
END;
/
Sortie:
La date que vous avez saisie est Vendredi.
8. Ecrire un programme en PL/SQL pour afficher la valeur d'une variable à l'intérieur et à l'extérieur d'une boucle en utilisant l'instruction LOOP EXIT. Exemple de sortie du programme:
La valeur de i à l'intérieur de la boucle est : 0
La valeur de i à l'intérieur de la boucle est : 1
La valeur de i à l'intérieur de la boucle est : 2
La valeur de i à l'intérieur de la boucle est : 3
La valeur de i à l'intérieur de la boucle est : 4
La valeur de i à l'extérieur de la boucle est : 5
DECLARE
i NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('La valeur de i à l\'intérieur de la boucle est: ' || TO_CHAR(i));
i := i + 1;
IF i > 4 THEN
EXIT;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('La valeur de i à l\'extérieur de la boucle est: ' || TO_CHAR(i));
END;
/
Sortie:
La valeur de i à l'intérieur de la boucle est : 0
La valeur de i à l'intérieur de la boucle est : 1
La valeur de i à l'intérieur de la boucle est : 2
La valeur de i à l'intérieur de la boucle est : 3
La valeur de i à l'intérieur de la boucle est : 4
La valeur de i à l'extérieur de la boucle est : 5
9. Ecrire un programme en PL/SQL pour afficher la valeur d'une variable à l'intérieur et à l'extérieur d'une boucle en utilisant l'instruction LOOP WHEN. Exemple de sortie du programme:
La valeur de i à l'intérieur de la boucle est : 0
La valeur de i à l'intérieur de la boucle est : 1
La valeur de i à l'intérieur de la boucle est : 2
La valeur de i à l'intérieur de la boucle est : 3
La valeur de i à l'intérieur de la boucle est : 4
La valeur de i à l'extérieur de la boucle est : 5
DECLARE
i NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('La valeur de i à l\'intérieur de la boucle est: ' || TO_CHAR(i));
i := i + 1;
EXIT WHEN i > 4;
END LOOP;
DBMS_OUTPUT.PUT_LINE('La valeur de i à l\'extérieur de la boucle est: ' || TO_CHAR(i));
END;
/
Sortie:
La valeur de i à l'intérieur de la boucle est : 0
La valeur de i à l'intérieur de la boucle est : 1
La valeur de i à l'intérieur de la boucle est : 2
La valeur de i à l'intérieur de la boucle est : 3
La valeur de i à l'intérieur de la boucle est : 4
La valeur de i à l'extérieur de la boucle est : 5
10. Écrire un programme en PL/SQL en utilisant une boucle imbriquée avec l'instruction EXIT WHEN. Exemple de sortie du programme:
La valeur de i = 1
La valeur de k = 1
La valeur de k = 2
La valeur de k = 3
La valeur de k = 4
Sortie de la boucle intérieure
La valeur de i = 2
La valeur de k = 5
Sortie de la boucle intérieure
La valeur de i = 3
La valeur de k = 6
Sortie de la boucle intérieure
Sortie de la boucle extérieure
DECLARE
i PLS_INTEGER := 0;
n PLS_INTEGER := 0;
BEGIN
LOOP
i := i + 1;
DBMS_OUTPUT.PUT_LINE ('La valeur de i = ' || i);
LOOP
k := k + 1;
DBMS_OUTPUT.PUT_LINE ('La valeur de k = ' || k);
EXIT WHEN (k > 3);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Sortie de la boucle intérieure');
EXIT WHEN (i > 2);
END LOOP;
DBMS_OUTPUT.PUT_LINE ('Sortie de la boucle extérieure');
END;
/
Sortie:
La valeur de i = 1
La valeur de k = 1
La valeur de k = 2
La valeur de k = 3
La valeur de k = 4
Sortie de la boucle intérieure
La valeur de i = 2
La valeur de k = 5
Sortie de la boucle intérieure
La valeur de i = 3
La valeur de k = 6
Sortie de la boucle intérieure
Sortie de la boucle extérieure
11. Écrire un programme en PL/SQL en utilisant une boucle avec l'instruction CONTINUE. Exemple de sortie du programme:
A l'intérieur de la boucle: i = 0
A l'intérieur de la boucle: i = 1
A l'intérieur de la boucle: i = 2
A l'intérieur de la boucle: i = 3
A l'intérieur de la boucle, après CONTINUE: i = 4
A l'intérieur de la boucle: i = 4
A l'intérieur de la boucle, après CONTINUE: i = 5
A la sortie de la boucle: i = 5
DECLARE
i NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE ('A l\'intérieur de la boucle: i = ' || TO_CHAR(i));
i := i + 1;
IF i < 4 THEN
CONTINUE;
END IF;
DBMS_OUTPUT.PUT_LINE
('A l\'intérieur de la boucle, après CONTINUE: i = ' || TO_CHAR(i));
EXIT WHEN i = 6;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('A la sortie de la boucle: i = ' || TO_CHAR(i));
END;
/
Sortie:
A l'intérieur de la boucle: i = 0
A l'intérieur de la boucle: i = 1
A l'intérieur de la boucle: i = 2
A l'intérieur de la boucle: i = 3
A l'intérieur de la boucle, après CONTINUE: i = 4
A l'intérieur de la boucle: i = 4
A l'intérieur de la boucle, après CONTINUE: i = 5
A la sortie de la boucle: i = 5
12. Écrire un programme en PL/SQL en utilisant une boucle avec l'instruction CONTINUE WHEN. Exemple de sortie du programme:
La valeur à l'intérieur de la boucle: i = 0
La valeur à l'intérieur de la boucle: i = 1
La valeur à l'intérieur de la boucle: i = 2
La valeur à l'intérieur de la boucle: i = 3
La valeur à l'intérieur de la boucle, après CONTINUE: i = 4
La valeur à l'intérieur de la boucle: i = 4
La valeur à l'intérieur de la boucle, après CONTINUE: i = 5
La valeur après la sortie de la boucle: i = 5
DECLARE
i NUMBER := 0;
BEGIN
LOOP -- After CONTINUE statement, control resumes here
DBMS_OUTPUT.PUT_LINE ('La valeur à l'intérieur de la boucle: i = ' || TO_CHAR(i));
i := i + 1;
CONTINUE WHEN i < 4;
DBMS_OUTPUT.PUT_LINE
('La valeur à l'intérieur de la boucle, après CONTINUE: i = ' || TO_CHAR(i));
EXIT WHEN i = 5;
END LOOP;
DBMS_OUTPUT.PUT_LINE ('La valeur après la sortie de la boucle: i = ' || TO_CHAR(i));
END;
/
Sortie:
La valeur à l'intérieur de la boucle: i = 0
La valeur à l'intérieur de la boucle: i = 1
La valeur à l'intérieur de la boucle: i = 2
La valeur à l'intérieur de la boucle: i = 3
La valeur à l'intérieur de la boucle, après CONTINUE: i = 4
La valeur à l'intérieur de la boucle: i = 4
La valeur à l'intérieur de la boucle, après CONTINUE: i = 5
La valeur après la sortie de la boucle: i = 5
13. Ecrire un programme en PL/SQL pour afficher les premiers 8 nombres. Exemple de sortie du programme:
nbr = 8;
Les 8 premiers nombres sont:
1 2 3 4 5 6 7 8
DECLARE
nbr NUMBER := 8;
BEGIN
DBMS_OUTPUT.PUT_LINE ('Les '||nbr||' premiers nombres sont: ');
FOR i IN 1..nbr LOOP
dbms_output.put(i||' ');
END LOOP;
dbms_output.new_line;
END;
/
Sortie:
Les 8 premiers nombres sont:
1 2 3 4 5 6 7 8
14. Ecrire un programme en PL/SQL pour afficher les 10 premiers nombres avec une différence de 2 et commençant par 1. Exemple de sortie du programme:
nbr = 10;
Les 10 premiers nombres sont:
1 3 5 7 8 9 10
DECLARE
nbr NUMBER:= 10;
i NUMBER:=1;
k NUMBER:=1;
BEGIN
DBMS_OUTPUT.PUT_LINE ('Les '||nbr||' premiers nombres sont: ');
DBMS_OUTPUT.PUT (i||' ');
FOR i IN 1..nbr-1 LOOP
k:=k+2;
dbms_output.put(k||' ');
END LOOP;
dbms_output.new_line;
END;
/
Sortie:
Les 10 premiers nombres sont:
1 3 5 7 8 9 10
15. Ecrire un programme en PL/SQL pour afficher les nombres premiers entre 1 et 30. Exemple de sortie du programme:
Les nombres premiers sont:
2 3 5 7 11 13 17 19 23 29
DECLARE
i NUMBER(2);
j NUMBER(2);
BEGIN
dbms_output.Put_line('Les nombres premiers sont:');
dbms_output.new_line;
i := 2;
LOOP
j := 2;
LOOP
EXIT WHEN( ( MOD(i, j) = 0 )
OR ( j = i ) );
j := j + 1;
END LOOP;
IF( j = i )THEN
dbms_output.Put(i||' ');
END IF;
i := i + 1;
exit WHEN i = 30;
END LOOP;
dbms_output.new_line;
END;
/
Sortie:
Les nombres premiers sont :
2 3 5 7 11 13 17 19 23 29
16. Écrire un programme en PL/SQL pour vérifier si un nombre est premier ou non en utilisant l'instruction goto avec la boucle for. Exemple:
nbr = 23;
23 est un nombre premier
DECLARE
str VARCHAR2(50);
nbr PLS_INTEGER := 23;
BEGIN
FOR i in 2..ROUND(SQRT(nbr)) LOOP
IF nbr MOD i = 0 THEN
str := ' n\'est pas un nombre premier';
GOTO nbr_premier;
END IF;
END LOOP;
str := ' est un nombre premier';
<<nbr_premier>>
DBMS_OUTPUT.PUT_LINE(TO_CHAR(nbr) || str);
END;
/
Sortie:
23 est un nombre premier
17. Écrire un programme en PL/SQL pour copier les enregistrements de la table clients à une autre (tmp_clients).
Table: clients
+-----------+----------------+-------------+--------+
| client_id | nom | ville | age |
+-----------+----------------+-------------+--------+
| 1001 | Alex Barbara | Paris | 25 |
| 1002 | Lois Collins | Lyon | 30 |
| 1005 | Karen Farley | Nice | 44 |
| 1006 | Kevin Thompson | Paris | 65 |
| 1007 | Scott Henry | Marseille | 32 |
| 1003 | Ellen McMullen | Montpellier | 53 |
+-----------+----------------+-------------+--------+
CREATE TABLE tmp_clients (
client_id NUMBER,
nom VARCHAR2(40),
ville VARCHAR2(40),
age NUMBER
);
BEGIN
INSERT INTO tmp_clients (client_id, nom, ville, age)
SELECT client_id, nom, ville, age
FROM clients;
END;
/