Vous êtes sur la page 1sur 7

Exercices PL/SQL

Écrire un bloc PL/SQL pour montrer une référence


insensible à la casse invalide à un identificateur
défini par l'utilisateur entre guillemets et sans
guillemets.
DECLARE
"WELCOME" varchar2(10) := 'welcome'; -- identifiant avec guillemets
BEGIN
DBMS_Output.Put_Line("Welcome"); --référence à l'identifiant avec des guillemets et des
majuscules différentes
END;
/

Écrire un bloc PL/SQL pour montrer qu'un mot


réservé peut être utilisé comme identifiant défini
par l'utilisateur.
DECLARE
"DECLARE" varchar2(25) := 'This is UPPERCASE';
"Declare" varchar2(25) := 'This is Proper Case';
"declare" varchar2(25) := 'This is lowercase';
BEGIN
DBMS_Output.Put_Line("DECLARE");
DBMS_Output.Put_Line("Declare");
DBMS_Output.Put_Line("declare");
END;
/

Ecrire un bloc PL/SQL pour montrer le résultat afin


de négliger les guillemets doubles dans le mot
réservé identificateur.
Dans l'exemple ci-dessous, les références devraient être un identifiant défini par l'utilisateur,
qui est un mot réservé, et on a également négligé de le mettre entre guillemets.
DECLARE
"WORLD" varchar2(20) := 'world'; -- WORLD n’est pas un mot réservé
"DECLARE" varchar2(20) := 'declare'; -- DECLARE est un mot réservé
BEGIN
DBMS_Output.Put_Line(World); -- Les guillemets sont facultatifs
DBMS_Output.Put_Line(DECLARE); --Les guillemets sont obligatoires
end;
/

La portée des variables


Le bloc PL/SQL suivant montre comment la portée et la visibilité de plusieurs identificateurs
peuvent être définies. Dans le premier sous-bloc, l'identificateur global var_a est à nouveau
déclaré. Pour référencer la variable globale var_a, le premier sous-bloc devrait la qualifier
avec le nom et le type de données du bloc externe. Le premier sous-bloc ne peut donc pas
référencer la variable globale var_a ; il ne peut référencer que sa variable locale var_a. Par
conséquent, le premier sous-bloc ne peut pas référencer var_d, et le deuxième sous-bloc ne
peut pas référencer var_c.

DECLARE
var_a INTEGER; -- La portée de var_a est INTEGER à partir de
var_b REAL; -- La portée de var_b est REAL
BEGIN
var_a:=5;
var_b:=10.25;
-- Visible : var_a (INTEGER), var_b (REAL)
DBMS_OUTPUT.PUT_LINE('In the Outer Block');
DBMS_OUTPUT.PUT_LINE('var_a = ' || var_a); -- var_a est INTEGER
DBMS_OUTPUT.PUT_LINE('var_b = ' || var_b); -- var_b est REAL

-- Début Premier sous-bloc :


DECLARE
var_a CHAR; --La portée de var_a a été changée en CHAR et commence à partir d'ici
var_c REAL ; -- La portée de var_c est REAL

BEGIN
var_a:='C';
var_c:=15.50;

-- Visible: var_a (CHAR), var_b (REAL), var_c (REAL)


DBMS_OUTPUT.PUT_LINE('In the First sub-Block');
DBMS_OUTPUT.PUT_LINE('var_a = ' || var_a); -- var_a is CHAR
DBMS_OUTPUT.PUT_LINE('var_b = ' || var_b); -- var_b is REAL
DBMS_OUTPUT.PUT_LINE('var_c = ' || var_c); -- var_c is REAL
NULL;
END; -- fin du premier sous-bloc
-- Début Deuxième sous-bloc :
DECLARE
var_d REAL; -- Champ d'application de var_d à partir d'ici avec REAL
BEGIN
-- Visible: var_a here is CHAR and var_b is REAL AND var_d is REAL
var_d:=20.75;
DBMS_OUTPUT.PUT_LINE('In the Second sub-Block');
DBMS_OUTPUT.PUT_LINE('var_a = ' || var_a); -- var_a is CHAR
DBMS_OUTPUT.PUT_LINE('var_b = ' || var_b); -- var_b is REAL
DBMS_OUTPUT.PUT_LINE('var_d = ' || var_d); -- var_d is REAL
NULL;
END; -- fin du deuxième sous-bloc

-- Visible: var_a is INTEGER and var_b is REAL


-- Il se trouve également dans le bloc extérieur
DBMS_OUTPUT.PUT_LINE('At the end in the Outer-Block');
DBMS_OUTPUT.PUT_LINE('var_a = ' || var_a); -- var_a est INTEGER
DBMS_OUTPUT.PUT_LINE('var_b = ' || var_b); -- var_b est REAL
END; -- terminer le bloc extérieur
/

La priorité des opérateurs et les parenthèses dans


plusieurs expressions plus complexes.
DECLARE
salary NUMBER := 40000;
commission NUMBER := 0.15;
BEGIN
-- La division est plus importante que l'addition :

DBMS_OUTPUT.PUT_LINE('8 + 20 / 4 = ' || (8 + 20 / 4));


DBMS_OUTPUT.PUT_LINE('20 / 4 + 8 = ' || (20 / 4 + 8));

-- Les parenthèses annulent la priorité de l'opérateur par défaut :

DBMS_OUTPUT.PUT_LINE('7 + 9 / 3 = ' || (7 + 9 / 3));


DBMS_OUTPUT.PUT_LINE('(7 + 9) / 3 = ' || ((7 + 9) / 3));

-- L'opération la plus imbriquée est évaluée en premier :

DBMS_OUTPUT.PUT_LINE('30 + (30 / 6 + (15 - 8)) = '


|| (30 + (30 / 6 + (15 - 8))));

-- Les parenthèses, même inutiles, améliorent la lisibilité :

DBMS_OUTPUT.PUT_LINE('(salary * 0.08) + (commission * 0.12) = '


|| ((salary * 0.08) + (commission * 0.12))
);

DBMS_OUTPUT.PUT_LINE('salary * 0.08 + commission * 0.12 = '


|| (salary * 0.08 + commission * 0.12)
);
END;
/
Vue d'ensemble du schéma RH

1. Afficher les détails des emplois dont le salaire


minimum est supérieur à 10000.

2.Display the first name and join date of the


employees who joined between 2002 and 2005

3.Afficher le prénom et la date d'entrée en fonction


de l'employé qui est soit un programmeur
informatique, soit un vendeur ( IT Programmer ou
Sales Man).

4.Écrivez un bloc PL/SQL pour calculer la prime


de 12% d'un employé dont l'ID est 110.
5.Ecrivez un programme pour échanger les
salaires des employés 120 et 122.

6.Augmenter le salaire de l'employé 115 en


fonction des conditions suivantes : Si l'expérience
est supérieure à 10 ans, augmenter le salaire de
20% Si l'expérience est supérieure à 5 ans,
augmenter le salaire de 10% Sinon 5% Cas par
expression

7.Modifiez le pourcentage de commission comme


suit pour le salarié dont l'ID = 150. Si le salaire est
supérieur à 10000, la commission est de 0,4%, si
le salaire est inférieur à 10000 mais que
l'expérience est supérieure à 10 ans, la
commission est de 0,35%, si le salaire est inférieur
à 3000, la commission est de 0,25%. Dans les
autres cas, la commission est de 0,15 %.

8.Ecrire un programme PL/SQL pour compter le


nombre d'employés dans le département 50 et
vérifier si ce département a des postes vacants ou
non. Il y a 45 postes vacants dans ce
département.
9.Écrire un programme en PL/SQL pour mettre à
jour le salaire d'un employé spécifique de 8%: si le
salaire dépasse la moyenne du salaire pour ce
poste et mettre à jour jusqu'à la moyenne si le
salaire est inférieur à la fourchette moyenne du
salaire, et afficher un message approprié.

Vous aimerez peut-être aussi