Exercices Corrigés PL/SQL: Instruction IF-THEN-ELSE

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.

 
 

Exercices corrigés PL/SQL: Instruction IF-THEN-ELSE

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:

Entrée:
small_nbr = 25;
big_nbr = 5;
---------------------
Sortie:
small_nbr = 5;
big_nbr = 25;
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;
/

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *