0% ont trouvé ce document utile (0 vote)
120 vues47 pages

Chap 1

Ce chapitre présente les concepts de base du langage PL/SQL tels que la structure d'un bloc PL/SQL, la déclaration et l'utilisation de variables, les types de données supportés et les structures de contrôle.

Transféré par

Siwar GHALLEB
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
120 vues47 pages

Chap 1

Ce chapitre présente les concepts de base du langage PL/SQL tels que la structure d'un bloc PL/SQL, la déclaration et l'utilisation de variables, les types de données supportés et les structures de contrôle.

Transféré par

Siwar GHALLEB
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 1

Présentation du Langage PL-SQL


1. Introduction
• Le langage SQL est un langage "ensembliste",
c'est-à-dire qu'il ne manipule qu'un ensemble de
données satisfaisant des critères de recherche.
• PL/SQL est un langage "procédural et structuré ",
il permet de traiter de manière conditionnelle les
données retournées par un ordre SQL.
• Créé par Oracle, PL/SQL est utilisé dans le cadre
de bases de données relationnelles.

2022/2023 7
1. Introduction
• Le langage PL/SQL, abréviation de "Procedural
Language extensions to SQL",
• PL/SQL étend SQL en lui ajoutant les éléments
suivants:
– Les variables et les types.
– Les structures de contrôle et les boucles.
– Les procédures et les fonctions.
– Les types d'objets et les méthodes.
• À la base, PL/SQL est un langage interprété, mais
depuis la version 9i RC1, le code peut être
compilé en code machine.
2022/2023 8
2. Architecture PL-SQL

2022/2023 9
2. Architecture PL-SQL
• Le moteur de base de données, Oracle,
coordonne tous les appels en direction de la
base.
• Le SQL et le PL/SQL comportent chacun un
"moteur d'exécution" associé, respectivement le
SQL STATEMENT EXECUTOR et le PROCEDURAL
STATEMENT EXECUTOR.
• Lorsque le serveur reçoit un appel pour exécuter
un programme PL/SQL, la version compilée du
programme est chargée en mémoire puis
exécutée par les moteurs PL/SQL et SQL.

2022/2023 10
2. Architecture PL-SQL
• Le PL/SQL est utilisé dans de nombreux
produits Oracle, parmi lesquels :
– Oracle Forms et Oracle Reports
– Oracle Application Express
– Oracle Warehouse Builder

2022/2023 11
3. Caractéristiques du langage PL / SQL
• Par contre, on trouve des Instructions
spécifiques à PL/SQL :
– Définition de variables
– Traitements conditionnels
– Traitements répétitifs
– Traitement des curseurs : parcours de table ligne par
ligne
– Traitement des erreurs
– Traitement des triggers: procédures exécutée lors de
la survenue d’un certain type d’événement sur une
table ou une colonne (ajout d’une ligne, modification
d’une colonne, suppression d’une ligne,…).
2022/2023 12
4. Composants du langage PL/SQL
• PL/SQL est constitué de:
– Langage de manipulation de données de SQL
(INSERT, UPDATE, DELETE)
– Langage d’interrogation de données de SQL
(SELECT)
– La gestion de transactions (COMMIT, ROLLBACK,
SAVEPOINT)
– Les fonctions standards de SQL
– La partie procédurale

2022/2023 13
4. Composants du langage PL/SQL
• Il ne comporte pas:
– Langage de définition de données : ALTER,
CREATE, RENAME
– Langage de contrôle de données : GRANT ,
REVOKE

2022/2023 14
Chapitre 2
Gestion des données et structures
de contrôle
1. Structure d’un Bloc PL/SQL
[ DECLARE
-- La section déclaration de variables, constantes,
exceptions, curseurs : description des structures et
des variables utilisées dans le bloc. (Cette section est
facultative )
]
BEGIN
-- La section corps du bloc :Instructions SQL et PL/SQL
[ EXCEPTION
-- La section traitement des exceptions (Cette section
est facultative)
]
END [nom_du_bloc] ;
/ 2022/2023 16
1. Structure d’un Bloc PL/SQL
• Chaque instruction se termine par un « ; »
• Les commentaires :
-- sur une ligne
ou
/* sur plusieurs
lignes */

2022/2023 17
1. Structure d’un Bloc PL/SQL
• Exemple:
SQL> BEGIN
INSERT INTO vol
(noflight,citdep,citar,dep_h,dep_mn,ar_h,ar_mn,ch_days)
VALUES ('AF7988','PARIS','DJERBA',9,0,11,45,0);
INSERT INTO vol
(noflight,citdep,citar,dep_h,dep_mn,ar_h,ar_mn,ch_days)
VALUES ('AF7985','PARIS','TUNIS',9,0,11,45,0);
COMMIT;
END; /
Procédure PL/SQL terminée avec succès.

2022/2023 18
1.1 Imbrication de blocs
• Les blocs PL/SQL peuvent être imbriqués les uns dans les autres:
DECLARE

BEGIN
DECLARE
…..
BEGIN
……

END ;
………
END ;
/ 2022/2023 19
2. Variables utilisées dans PL/SQL
• La déclaration d'une variable consiste à
allouer un espace pour stocker et modifier
une valeur. Elle se fait dans la partie DECLARE
du bloc PL/SQL.

• La variable a un type et peut recevoir une


valeur par défaut et/ou un statut NOT NULL.

2022/2023 20
2. Variables utilisées dans PL/SQL
• Différents types de variables :
– Variables de types ORACLE
– Variables de type BOOLEAN
– Variables faisant référence au dictionnaire de
données

2022/2023 21
2.1 Variables de type oracle
• Syntaxe :
Identifiant type [(precisionscale)] [NOT NULL] [:= valeur];
• Les identifiants doivent être différents des noms de colonnes.
• Exemple :
DECLARE
v_deptno NUMBER(2) NOT NULL := 10;
v_hiredate DATE;
v_location VARCHAR2(13) := 'Atlanta';
BEGIN
...
END;
/ 2022/2023 22
2.1.1 Variables de type scalaire
• Binary_integer :
entiers entre -2 147 483 647 et +2 147 483 647
• PLS_INTEGER:
Entier compris entre -2 147 483 647 et +2 147
483 647 (Plus rapide que BINARY_INTEGER car il
utilise les registres du processeur)
• Date : type date d’Oracle
• Rowid : type interne à Oracle composé de 6
octets qui permet d’identifier une ligne unique
d’une table et d’offrir un accès rapide aux
données.
2022/2023 23
2.1.1 Variables de type scalaire
• Composées
– RECORD
Déclaration d'un type RECORD : TYPE nom_type
IS RECORD (déclaration de propriétés);
Déclaration d'une variable enregistrement de ce
type : nom_variable nom_type;

2022/2023 24
2.1.2 Variables de type caractère
• Char [(n)] : chaîne de caractère à taille fixe
allant jusqu’à 32 767 caractère (au lieu de 255
dans la définition des colonnes des tables)
• VARCHAR2(n): chaîne de caractère de
longueur variable allant jusqu’à 32 767 (au
lieu de 2000 dans la définition des colonnes
des tables)
• LONG: Chaîne de caractères de longueur
variable avec au maximum 32760 octets

2022/2023 25
2.1.3 Variable de Type number
• NUMBER[(e,d)]: Nombre réel avec « e »
chiffres significatifs stockés et « d » décimales
• Positive : entiers positifs
• Natural : entiers naturels
• Decimal , float, integer, real : sont des sous-
types de NUMBER

2022/2023 26
2.1.3 Variable de Type booléen
• Syntaxe :
nom_var BOOLEAN;
• Exemple :
DECLARE
flag BOOLEAN;
BEGIN
...
END;

2022/2023 27
2.2 Variable de même type qu’un champ
• On peut déclarer une variable en faisant référence à un
champ de table sans connaitre son type et sa taille
• Syntaxe :
nom_var [Link]%TYPE;
• Exemple :
DECLARE
nom [Link]%TYPE;
BEGIN
...
END;
2022/2023 28
2.3 Variable de même type qu’une autre
variable
• On peut déclarer une variable en faisant référence à une
autre variable sans connaitre son type et sa taille
• Syntaxe :
nom_var2 nom_var1%TYPE;
• Exemple :
DECLARE
ancien_sal NUMBER(5);
nouveau_sal ancien_sal%TYPE; --NUMBER(5);
BEGIN
...
END;
/
2022/2023 29
2.4 Variable de même structure qu'une
ligne d'une table de la base
• Au lieu de déclarer un ensemble de variables référençant à
chaque colonne de la table, on pourrait déclarer une
variable de même structure qu’une ligne de la table
• Syntaxe :
nom_var table%ROWTYPE;
• Exemple :
DECLARE
ligne pilote%ROWTYPE;
BEGIN
...
END ;
/

2022/2023 30
2.5 Déclaration de constante
• Une constante est une variable qui ne change pas
de valeur lors du traitement, la déclaration,
comme pour les variables, se fait dans la section
DECLARE
• Syntaxe
Identifiant CONSTANT type [(precision,scale)]
[NOT NULL] [:= valeur];
• Exemple
PI CONSTANT Number (9,5) := 3,14159;

2022/2023 31
2.6 Affectation de variable
• peut être faite de 2 façons différentes :
– En utilisant l'opérateur :=
exemple
Ma_variable := 10 ;
Ma_chaine := 'Chaîne de caractères' ;
– Ou par une requête
Syntaxe
SELECT propriété1, propriété2, ...
INTO variable_1, variable_2, ...
FROM relations
WHERE condition;

2022/2023 32
2.6 Affectation de variable
• Exemple
DECLARE
v_deptno NUMBER(2);
v_loc VARCHAR2(15);
BEGIN
SELECT deptno, loc
INTO v_deptno, v_loc
FROM dept
WHERE dname = 'SALES';
... 2022/2023 33
2.6 Affectation de variable
• Les variables logiques reçoivent TRUE , FALSE
ou bien le résultat d’une expression logique.
• Exemple
– Bien payé := V_sal>1550;
– Trouve := True;

2022/2023 34
2.7 Types composés

• PL/SQL offre deux types composés :


– enregistrement (RECORD)
– et table (TABLE)

2022/2023 35
2.7.1 Types composés:
Enregistrement
• Déclaration : La déclaration de variable de ce type se
fait:
1) Soit par référence à une structure de table, en utilisant la
notion %ROWTYPE.
Syntaxe :
Nom_varibale nom_table%rowtype;
Exemple:
info_pilote pilote%rowtype;
• Rq: Rappel du schéma de la table pilote:
Pilote (nopilot, nomp, adresse, sal, comm, embauche)

2022/2023 36
2.7.1 Types composés:
Enregistrement
2) Soit par énumération des rubriques qui la
composent. Dans ce cas, la déclaration se fait
en 2 étapes :
A- Déclaration du type enregistrement :
– Syntaxe : TYPE nom_type IS RECORD (nom_champ
type_champ,…) ;
– Exemple: TYPE t_pilote IS RECORD (nom_pilote
[Link]%type, revenu_pilote number(8,2)) ;

2022/2023 37
2.7.1 Types composés:
Enregistrement
B- Déclaration de la variable de type
enregistrement :
– Syntaxe : nom_variable nom_type ;
– Exemple : Employe t_pilote ;

2022/2023 38
2.7.2 Types composés:
Table
• Le type table représente une structure composée
d’éléments d’un même type scalaire.
– L’accès à un élément de la table s’effectue grâce à un
indice, ou clé primaire déclarée de type
BINARY_INTEGER.
• La déclaration de variable de ce type se fait en 2
étapes :
1-Déclaration du type de l’élément de la table
2-Déclaration de la variable de type table
2022/2023 39
2.7.2 Types composés:
Table
1-Déclaration du type de l’élément de la table :
TYPE nom_type IS TABLE OF type_champ INDEX BY
BINARY_INTEGER;
2-Déclaration de la variable de type table :
nom_variable nom_type ;

• Exemple :
– TYPE t_pilote IS TABLE OF CHAR(35) INDEX BY
BINARY_INTEGER ;
– T1 t_pilote ;

2022/2023 40
3. Conversion explicite
• TO_CHAR(nombre,format)
Renvoie la chaîne de caractères obtenue en
convertissant « nombre » en fonction de «
format ». Exp: to_char(125, '999')
• TO_DATE(chaîne,format)
Permet de convertir une chaîne de caractères
en type date. Le format est identique à celui
de la fonction TO_CHAR. Exp :
to_date('11 Fev 2013', 'DD Mon YYYY')
2022/2023 41
4. Conversion implicite
• Affectation d’un nombre dans une chaîne:
V_message VARCHAR2 := 1500;
• Affectation d’un nombre représenté sous
forme de chaine dans une variable
numérique:
V_sal number(9,3) := v_message;
• Conversion entre DATE et CHAR:
V_today VARCHAR2(9) := SYSDATE;
V_date DATE := ’23_FEV_07’;
2022/2023 42
5. Les Opérateurs
• Opérateurs arithmétiques:
+ - * / **
• Opérateur de concaténation: ||
• Opérateurs de comparaison:
= > < <= >= <>
IS NULL, LIKE, BETWEEN, IN
• Opérateurs logiques
AND, OR, NOT
2022/2023 43
6. Affichage sur l’écran
• Il est utile d’afficher les valeurs des variables
sur écran
• L’application « DBMS_OUTPUT » permet
d'envoyer des messages depuis un bloc
PL/SQL.
• La procédure « PUT_LINE » de cette
application permet de placer des informations
dans un tampon qui pourra être lu par un
autre bloc PL/SQL.
2022/2023 44
6. Affichage sur l’écran
• Pour afficher un commentaire:
DBMS_OUTPUT.PUT_LINE(‘texte_mess’);
• Pour afficher le contenu d’une variable on utilise:
DBMS_OUTPUT.PUT_LINE(nom_var);
• L’affichage d’un commentaire suivi de l’affichage du
contenu d’une variable:
DBMS_OUTPUT.PUT_LINE(‘texte_mess’ || nom_var);
• L’affichage ne sera visualisé que lorsque l’ordre SQL
suivant est exécuté dans l’environnement SQL+:
SQL> SET SERVEROUTPUT ON;

2022/2023 45
6. Affichage sur l’écran
• Exemple:
SQL> SET SERVEROUTPUT ON;
BEGIN
DBMS_OUTPUT.PUT_LINE ('Hello World');
END;

2022/2023 46
7. Instructions de contrôle
• PL/SQL offre des structures de contrôle:
–Alternatives
–Répétitives.

2022/2023 47
7.1 Structure alternative
• Cette structure permet l’exécution d’une
séquence d’instructions sous le contrôle d’une
condition. 3 formes existent :
1) IF condition THEN 3) IF condition THEN
{...traitements...} {... traitements...}
END IF; ELSIF condition THEN
2) IF condition THEN {... traitements...}
{... traitements...} ELSE
ELSE {... traitements...}
{... traitements...} END IF;
END IF;
2022/2023 48
7.1 Structure alternative

BEGIN
IF monthly_value <= 4000 THEN
ILevel := 'Low Income';
ELSIF monthly_value > 4000 and monthly_value <= 7000 THEN
ILevel := 'Avg Income';
ELSIF monthly_value > 7000 and monthly_value <= 15000 THEN
ILevel := 'Moderate Income';
ELSE
ILevel := 'High Income';
END IF;
RETURN ILevel;
END;
2022/2023 49
7.2 Structures répétitives
• LOOP répète indéfiniment une séquence
d’instructions
1) LOOP 2) LOOP
Instructions Instructions
IF condition EXIT WHEN condition;
END LOOP;
THEN EXIT;
END IF;
END LOOP;
2022/2023 50
7.2 Structures répétitives
• FOR contrôle le nombre d’exécutions des
instructions de la structure répétitive par
incrémentation et test d’une variable indice. Le
pas ne peut être égal qu’à 1.
FOR variable_indice IN [REVERSE] val_debut .. val_fin
LOOP
Instructions
END LOOP;

2022/2023 51
7.2 Structures répétitives
• WHILE répète les instructions de la structure
répétitive tant que la condition de la valeur est
True.
WHILE condition
LOOP
Instructions
END LOOP;

2022/2023 52

Vous aimerez peut-être aussi