2020/2021)
- Premiers pas en PL/SQL
- Bloc anonyme
- Alternatives ( IF ..ELSE
ELSE, Case)
- Boucles ( LOOP , WHILE , FOR)
Introduction :
Rappelons nous que le PL/ SQL fait des choses supplémentaires que SQL ne peut pas faire seul. Il est
donc considéré comme une extension de SQL. Il est particulièrement utile pour les calculs, les mises
à jour, les actions complexes, vérification, etc...Bref
etc c’est un langage de programmation
procédurale. Dans ce TP,, vous allez essayer quelques exemples de blocs anonymes, avec les
commandes PL/SQL. Puis programmer avec le PL/SQL en utilisant les branchements conditionnels
(IF..else,, CASE) et les boucles (LOOP, FOR et WHILE
ILE).
Important :
- Dans tout le TP vous utiliser le schéma HR, si vous avez oublié le mot de passe, procéder
comme suit pour l’initialiser :
Invite de commandes cmd :
C:\Users\hp>sqlplus
sqlplus / as sysdba
SQL> alter user hr identified by hr123 account unlock;
- À chaque fois qu’il est demandé de saisir
saisir une valeur par l’utilisateur, vous utilisez le
caractère de substitution « &» comme vue dans le cours.
Tâche 1:: Un premier exemple
1) Taper ce bloc PL/SQL puis exécutez
exécutez-le:
SET SERVEROUTPUT ON
DECLARE
INTERET CONSTANT NUM
NUMBER (4,2) := 1.15;
MONTANT NUMBER (4,2)
(4,2);
BEGIN
MONTANT:= 100 * INT
INTERET;
DBMS_OUTPUT.PUT_LINE ('PROGRAMME TERMINÉ');
END;
2) Pouvez-vous
vous expliquer quel est le problème?
Tâche 2:
1- Créer une nouvelle table appelée TEMP avec les trois champs suivants sans spécifier la clef primaire
PREMIER VARCHAR2 (20)
DEUXIEME VARCHAR2 (20)
TROISIEME VARCHAR2 (100)
2-
a- Écrire un bloc PL / SQL qui permet de récupérer le nom (last_name) et l'emploi (job_id) de la table
EMPLOYEES de schéma HR pour personnel numéro 100 ( employee_id=100) et l’insert dans la table
TEMP comme suit :
dans les champs DEUXIEME insérer le last_name, dans TROISIEME le job_id, Et PREMIER insérer
l’ employee_id concerné ( c à dire 100 dans notre cas
b- Exécuter le bloc deux fois ou plus, juste pour voir que l'insert se fait plusieurs fois.
c- Essayez la commande ROLLBACK maintenant et vérifier à nouveau la table TEM. que ce qu’est arrivé?
Que faire pour éviter ça ? Faites le et refaire les point b et c.
3- Essayez maintenant avec le code partiellement rempli pour s’aider. Je veux savoir qui gère de département
‘Finance’. en utilisant un bloc PL / SQL
a- vous remplissez les sections, ce qui marqué par des points ( ……………………………)
b- Après avoir terminé et exécuter le code faites un select sur la table TEMP.
Tâche 3: Découvrir les erreurs dans ce code puis les corriger en interprétant le message d’erreur
fournit par le détecteur d'erreur Oracle
Le code ci-dessous est conçu pour calculer la différence de salaire entre deux dates. Tapez le exactement
comme il est (encore mieux, le copiez et collez).
- Corriger toute les erreurs qu’il contient pour obtenir un code qui marche.
Declare;
v_diff varchar2(3)
v_startdate date="11-06-01";
v_enddate data:='4-04-06';
begin
select max(salary)-min(salary) into diff;
from employees where hire_date between startdate and
v_enddate;
dbms_output_put_line ('la différence de salaire entre '|v_startdate || and
'||enddate|| ' est '||v_diff);
end
- Utiliser les fonctions UPPER ou LOWER pour éviter la confusion majuscule et minuscule
- Utiliser %type pour le type des variables.
- Utiliser les deux tables : EMPLOYEES, JOBS , Departments
- Utilisez le & pour inviter l'utilisateur à entrer le nom de famille (last_name) de l’employé.
1- Exécuter tout d’abord le code ci-dessous contenant (FOR..LOOP ) et examiner la sortie que vous obtenez.
Begin
For counteur in 1..14 Loop
If mod(counteur,3)=0 then
Dbms_output.put_line('la valeur de counteur divisible par 3 est : '||counteur);
End if;
End loop;
End;