PL SQL Rapport
PL SQL Rapport
PL/SQL
AMRANE
S2ID
MOHAMMED-AMINE
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
Remerciment
Je souhaite vous adresser mes plus sincères
remerciements pour Mr. Korikache, vous nous
prodiguez avec tant de patience et de
bienveillance. Votre capacité à expliquer les
concepts complexes du PL/SQL de manière
simple et accessible est une véritable
bénédiction pour nous. Non seulement vous
nous aidez à mieux comprendre la matière, mais
vous parvenez également à rendre notre
parcours plus léger et plus agréable.
Grâce à votre soutien constant, vous nous
permettez de dormir paisiblement et
sereinement, sans être accablés par les doutes
et les incertitudes. Vous êtes bien plus qu'un(e)
professeur(e) ; vous êtes une personne qui nous
protège des difficultés de la vie, en nous offrant
une stabilité et une confiance précieuses.
Nous vous sommes infiniment
reconnaissants pour tout ce que vous faites pour
nous, et c’est un privilège d’apprendre sous
votre direction.
Table de matière
Remerciment...........................................1
INTRODUCTION AU RAPPORT....................8
Rappel SQL............................................10
🔹 Création de Bases de Données et Tables...............10
🔹 Types de Données SQL (MySQL).................................11
🔹 Modification de Structure (ALTER TABLE).............13
🔹 Manipulation des Données.............................................14
🔹 Contraintes d'Intégrité......................................................15
🔹 Contraintes de Domaine......................................................15
🔹 Clés Primaires et Étrangères................................................15
🔹 Actions Référentielles..........................................................16
🔹Suppression (DROP).............................................................16
🔹 Les requêtes SQL..................................................................17
🔹Union, intersection, exception.......................................17
🔹 Les jointures............................................................................18
Introduction à PL/SQL............................19
🔹 Caractéristiques....................................................................19
🔹 Différence entre SQL et PL/SQL...................................19
🔹 SQL Developer : Outils et fonctionnalités.............20
🔹 Feuille SQL...............................................................................20
April 14, 2025
2
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
🔹 Structure...................................................................................21
🔹 PL/SQL et Manipulation de Données.........................21
🔹Quelque commandes...........................................................21
Les Variables en PL/SQL.........................23
🔹 Déclaration de Variables..................................................23
🔹 Règles de nommage............................................................23
🔹 Conversion de Types............................................................23
🔹 Syntaxe de Déclaration........................................................24
🔹 Variables de Substitution et de Liaison................................24
🔹 Lecture d’un Bloc depuis SQL Plus.......................................24
🔹 Types de Données Personnalisés...............................25
🔹 Sous-type (SUBTYPE)...........................................................25
🔹 Structure (RECORD).............................................................25
🔹 Tableau (TABLE)................................................................... 25
🔹 Tableaux et Structures.....................................................26
🔹 Tableau de Structure............................................................26
🔹 Tableaux pré-dimensionnés.................................................26
🔹 Fonctions sur les Tableaux.............................................26
🔹 Variables Basées sur une Table...................................26
🔹 Basé sur une colonne (%TYPE)............................................27
🔹 Basé sur une ligne(%ROWTYPE)..........................................27
ACCÈS AUX TABLES EN PL/SQL................28
🔹 Le SELECT INTO.....................................................................28
🔹 BULK COLLECT........................................................................29
🔹 INSERT INTO............................................................................29
🔹 UPDATE.......................................................................................30
🔹 DELETE........................................................................................31
🔹 ATTRIBUTS SQL......................................................................32
🔹CLAUSE RETURNING.............................................................33
✅ Résumé.......................................................................................34
STRUCTURES DE CONTRÔLE EN PL/SQL. . .35
🔹 IF THEN ELSEIF ELSE..........................................................35
🔹 CASE WHEN..............................................................................36
🔹LOOP..............................................................................................37
🔹 WHILE LOOP.............................................................................38
🔹FOR LOOP...................................................................................39
🔹 GOTO............................................................................................40
✅ Résumé.......................................................................................42
Les Curseurs en PL/SQL..........................43
🔹 Introduction aux Curseurs..............................................43
🔹 Déclaration d’un Curseur.................................................43
🔹 Ouverture et Fermeture d’un Curseur.....................44
🔹 Lecture d’une Ligne avec un Curseur.......................45
🔹 Lecture avec condition.........................................................46
🔹 Lecture Complète avec Boucle (LOOP).................................47
🔹 Utilisation de FOR avec un Curseur......................................47
🔹 Passage de Paramètres dans un Curseur.............................48
🔹 Curseur avec FOR UPDATE...................................................48
🔹Définition.............................................................................. 70
🔹Syntaxe générale..................................................................71
🔹 LES ARGUMENTS DES PROCÉDURES....................................71
🔹APPELER UNE PROCÉDURE STOCKÉE....................................72
🔹 EXEMPLES DE PROCÉDURES................................................73
🔹 SUPPRIMER UNE PROCÉDURE..............................................77
🔹FONCTIONS STOCKÉES.......................................................78
🔹 Définition............................................................................. 78
🔹 Syntaxe générale.................................................................78
🔹 Appel d’une fonction............................................................79
🔹 EXEMPLES DE FONCTIONS..............................................79
🔹 FONCTIONS AVANCÉES......................................................80
🔹 Fonction avec TABLEAU en retour dans un bloc...................80
🔹 Appel d’une fonction sans bloc............................................81
🔹SUPPRIMER UNE FONCTION..................................................82
🔹 COMPILATION.......................................................................82
✅ Résumé............................................................................................83
Packages...............................................84
🔹 Definition..................................................................................... 84
🔹Composition d’un package.....................................................84
🔹Structure d’un package...........................................................85
🔹 Exemples de création..............................................................86
🔹Package avec variables globales..........................................86
🔹 Package avec une fonction...................................................87
🔹 Pakage avec plusieurs fonctions.........................................88
April 14, 2025
6
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
INTRODUCTION AU
RAPPORT
PL/SQL (Procedural Language/Structured
Query Language) est une extension de SQL
conçue pour offrir des capacités procédurales au
sein des bases de données Oracle.
Contrairement au SQL standard, qui est un
langage déclaratif axé sur l'interrogation et la
April 14, 2025
7
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
Rappel SQL
🔹 Création de Bases de
Données et Tables
Créer une Base de Données
Syntaxe de base :
Contraintes courantes
o NOT NULL : Valeur obligatoire.
o DEFAULT valeur : Valeur par défaut.
o PRIMARY KEY : Clé primaire.
Exemple :
Types Numériques
Plage de
Type Description Taille
Valeurs
Entier très 1
TINYINT -128 à +127
petit octet
0 à 18 446
BIGINT
Entier positif 744 073 8
UNSIGNE
grand 709 551 octets
D
615
Nombre
Variab
DECIMAL décimal (ex: Variable
le
12.99)
Taille
Taille
Type Description Stocka
Max
ge
Texte 65 535
VARCHA L +1
variable (ex: caractère
R(X) octet
prénom) s
Taille
Taille
Type Description Stocka
Max
ge
(ex: caractère
octets
description) s
Types Date/Heure
Format
Type Plage de Valeurs
Exemple
1000-01-01 à 9999-
DATE AAAA-MM-JJ
12-31
1000-01-01 00:00:00
DATETI AAAA-MM-JJ
à 9999-12-31
ME HH:MM:SS
23:59:59
🔹 Modification de Structure
(ALTER TABLE)
Ajouter une colonne :
🔹 Manipulation des
Données
INSERT INTO
Insertion simple :
Insertion multiple :
DELETE
Supprimer avec condition :
🔹 Contraintes d'Intégrité
🔹 Contraintes de Domaine
NOT NULL : Champ obligatoire.
DEFAULT : Valeur par défaut (ex: DEFAULT
CURRENT_DATE).
CHECK : Validation personnalisée (ex: CHECK
(age >= 18)).
🔹 Actions Référentielles
[ON DELETE {CASCADE | SET NULL | NO ACTION
| RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO
ACTION RESTRIC }] Exemple :
🔹Suppression (DROP)
Base de données :
Table :
🔹Union, intersection,
exception
✔️Ils travaillent sur les lignes complètes
Ils combinent les résultats de deux
requêtes indépendantes.
Les requêtes doivent avoir le même
nombre de colonnes et des types
compatibles.
🔹 Les jointures
Introduction à PL/SQL
• PL/SQL : Langage procédural pour les bases
de données.
🔹 Caractéristiques
• Permet d’écrire des blocs de programme.
• Autorise l’utilisation de variables.
• Prend en charge les structures de contrôle
(boucles, conditions).
• Permet l’utilisation de procédures, fonctions,
triggers et packages.
🔹 Feuille SQL
Actions possibles :
o Exécuter des instructions.
o Formater des requêtes.
o Afficher les résultats et erreurs.
o Commit / Rollback.
o Suppression et actualisation des données.
🔹 Structure
🔹 PL/SQL et Manipulation
de Données
• LMD (Langage de Manipulation de Données)
autorisé.
• LDD (Langage de Définition de Données)
interdit dans certains contextes.
🔹Quelque commandes
Les Variables en
PL/SQL
🔹 Déclaration de Variables
• Utilisation du bloc DECLARE pour déclarer
les variables avant l’exécution du programme.
🔹 Règles de nommage
Longueur ≤ 30 caractères.
Doit commencer par une lettre.
Peut contenir lettres (A-Z), chiffres (0-9), et
symboles ($, _, #).
Ne doit pas être un mot réservé.
🔹 Conversion de Types
• Conversion Explicite :
o TO_DATE()
o TO_CHAR()
• Conversion Implicite :
o Réalisée automatiquement par Oracle (ex.
affectation d’une variable).
🔹 Syntaxe de Déclaration
🔹 Variables de Substitution et de
Liaison
• Variable de substitution : &nom_variable
• Variable de liaison : :nom_variable
o Exécutée avec set SERVEROUTPUT on.
🔹 Types de Données
Personnalisés
🔹 Sous-type (SUBTYPE)
🔹 Structure (RECORD)
🔹 Tableau (TABLE)
Définition et manipulation d’un tableau indexé.
🔹 Tableaux et Structures
🔹 Tableau de Structure
Exemple : Créer un tableau pour stocker
des employés.
🔹 Tableaux pré-dimensionnés
🔹 BULK COLLECT
• Permet de récupérer plusieurs lignes à la fois
dans un tableau PL/SQL.
• Syntaxe :
________________________________________
🔹 INSERT INTO
• Ajoute une nouvelle ligne dans une table.
• Syntaxe :
________________________________________
🔹 UPDATE
• Modifie une ou plusieurs valeurs dans une
table.
• Syntaxe :
________________________________________
🔹 DELETE
• Supprime une ligne d’une table.
• Syntaxe :
________________________________________
🔹 ATTRIBUTS SQL
• SQL%FOUND : TRUE si une requête a affecté
des lignes.
• SQL%NOTFOUND : TRUE si aucune ligne n'a
été affectée.
• SQL%ROWCOUNT : Nombre de lignes
affectées.
Exemple : Vérifier une mise à jour
________________________________________
🔹CLAUSE RETURNING
• Retourne les valeurs d’un enregistrement
affecté par INSERT, UPDATE ou DELETE.
• Syntaxe :
✅ Résumé
• SELECT INTO → Récupérer une ligne
• BULK COLLECT → Récupérer plusieurs lignes
• INSERT INTO → Ajouter une ligne
• UPDATE → Modifier une ligne
• DELETE → Supprimer une ligne
• RETURNING → Récupérer les valeurs d’un
enregistrement après modification
• SQL%FOUND / SQL%ROWCOUNT → Vérifier
l’impact d’une requête
STRUCTURES DE
CONTRÔLE EN PL/SQL
🔹 IF THEN ELSEIF ELSE
• Permet d'exécuter un bloc de code selon une
condition.
• Syntaxe :
________________________________________
🔹 CASE WHEN
• Similaire à IF, mais plus adapté aux
conditions multiples.
• Syntaxe :
• Exemple :
________________________________________
🔹LOOP
• Exécute un bloc de code en boucle jusqu'à
une condition de sortie.
• Syntaxe :
________________________________________
🔹 WHILE LOOP
• Répète l’exécution tant qu’une condition est
vraie.
• Syntaxe :
• Exemple :
________________________________________
🔹FOR LOOP
• Répète un bloc pour une plage de valeurs.
• Syntaxe :
________________________________________
🔹 GOTO
• Permet de sauter à une instruction.
• Syntaxe :
• Exemple :
✅ Résumé
• IF THEN ELSE → Conditions simples et
multiples
• CASE WHEN → Alternative compacte aux IF
April 14, 2025
41
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
🔹 Introduction aux
Curseurs
Un curseur est un mécanisme permettant
de manipuler des résultats de requêtes SQL.
Étapes principales d'utilisation :
1. Déclaration (DECLARE)
2. Ouverture (OPEN)
3. Lecture (FETCH)
4. Fermeture (CLOSE)
Exemple :
🔹 Ouverture et Fermeture
d’un Curseur
Syntaxe :
Exemple :
Exemple :
Exemple :
🔹 Utilisation de CURS%FOUND
et CURS%NOTFOUND
Ces attributs permettent de vérifier si une
ligne a été trouvée après un FETCH.
Exemple : Lire une ligne et vérifier si
elle existe
🔹 Utilisation de CURS%ROWCOUNT
%ROWCOUNT permet de compter combien
de lignes ont été lues depuis l’ouverture
du curseur.
Exemple : Afficher le nombre de lignes
lues
✅ Résumé
Déclaration ➝ CURSOR cur_name IS
SELECT ...;
Ouverture ➝ OPEN cur_name;
Lecture ➝ FETCH cur_name INTO variable;
Fermeture ➝ CLOSE cur_name;
CURS%ISOPEN ➝ Retourne TRUE si le
curseur est ouvert, sinon FALSE.
April 14, 2025
51
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
EXCEPTIONS EN
PL/SQL
🔹 Exception système
nommée
Les exceptions système nommées sont des
erreurs prédéfinies par Oracle et identifiables
par leur nom. Elles concernent les erreurs
courantes pouvant se produire pendant
l’exécution d’un bloc PL/SQL.
🔹 l’exception NO_DATA_FOUND
🔹 plusieurs gestionnaires
d’exceptions
🔹 Exception système
anonyme
Les exceptions système anonymes sont les
erreurs levées par Oracle mais non nommées
explicitement (par exemple ORA-01403, ORA-
00001, etc.).
🔹 Elles ne disposent pas de nom réservé dans
PL/SQL.
April 14, 2025
58
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
🔹 Fonction SUBSTR
Objectif : Extrait une sous-chaîne d'une chaîne
de caractères.
Syntaxe : SUBSTR(chaîne, position_départ,
longueur)
Dans votre cas :
chaîne = SQLERRM(i) (le message d'erreur
pour le numéro d'erreur i)
position_départ = 1 (commence au début de
la chaîne)
longueur = 100 (prend les 100 premiers
caractères)
🔹 SQLERRM(i)
Retourne le message d'erreur associé au
numéro i.
Lorsque i = 0, il retourne "ORA-0000: normal,
successful completion" ("ORA-0000 :
achèvement normal et réussi").
🔹 Utilisation de paramètres
d’exécution
🔹 Exception utilisateur
nommée
Les exceptions utilisateur nommées sont
déclarées explicitement par le développeur
avec DECLARE, et éventuellement associées à
un code d’erreur Oracle grâce à la directive
PRAGMA EXCEPTION_INIT.
🔹 Elles permettent de gérer des erreurs précises
comme les violations de contraintes (-1, -2292,
etc.).
erreur EXCEPTION;
Objectif : Déclare une exception
personnalisée nommée erreur.
Fonctionnement :
o Crée une exception définie par
l'utilisateur, qui peut être levée
manuellement ou associée à une erreur
Oracle.
o Sans liaison à un code d'erreur, elle ne
déclenche rien par défaut.
April 14, 2025
63
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
🔹 Exception utilisateur
anonyme
Comparaison de dates :
✅ Résumé
Les exceptions en PL/SQL offrent des
mécanismes puissants pour :
Capturer les erreurs système (nommées
ou non),
Définir des règles métier
personnalisées via des exceptions
utilisateur,
Protéger le programme contre des
interruptions brutales,
Améliorer la lisibilité et la robustesse
du code.
4 Types d’Exceptions en PL/SQL
Type Nom Gestion
WHEN OTHERS
Exceptio (Pas de nom)
n
système
anonyme
Exceptio
n Nom explicite DECLARE, PRAGM
utilisateu (défini par le dev) A, WHEN NOM
r
nommée
Exceptio
n Levée localement RAISE dans un
utilisateu (RAISE) bloc
r
anonyme
PROGRAMMES
STOCKÉES
Un programme stocké en PL/SQL est un sous-
programme qui est :
Écrit en PL/SQL.
Stocké dans la base de données (sous forme
compilée).
Appelé pour effectuer des traitements
spécifiques.
Il existe deux types de programmes
stockés :
1. Procédures stockées (ne retournent
pas de valeur).
2. Fonctions stockées (retournent une
valeur).
April 14, 2025
70
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
🔹 PROCÉDURES STOCKÉES
🔹Définition
Une procédure stockée est un bloc PL/SQL
qui :
Réalise un traitement.
Ne retourne pas de valeur directement.
Peut recevoir des arguments (en entrée,
sortie ou les deux).
Est stockée dans la base pour
réutilisation.
Stockée compilée dans la base de données.
Exécutable indépendamment ou à l’intérieur
d’un bloc PL/SQL.
Peut appeler d’autres programmes PL/SQL.
🔹Syntaxe générale
Mode Description
les données.
Représente un type de données SQL
TYPE
valide (INT, VARCHAR2, DATE…).
🔹 EXEMPLES DE PROCÉDURES
🔹 Cas 1 : Sans argument
Objectif : augmenter le prix de 10% des classes
dont le numéro est 1.
🔹FONCTIONS STOCKÉES
🔹 Définition
🔹 Syntaxe générale
🔹 EXEMPLES DE FONCTIONS
🔹 Cas 1 : Sans argument
Objectif : retourner le nombre total de
bateaux.
🔹 FONCTIONS AVANCÉES
🔹 Fonction avec TABLEAU en retour
dans un bloc
Objectif :
Lire la table bateau à partir d’un numéro
donné.
Retourner les lignes sous forme de tableau.
🔹 COMPILATION
Permet de recompiler un programme stocké
après modification :
✅ Résumé
Procédures → Sous-programmes stockés ne
retournant aucune valeur mais effectuant un
traitement.
Fonctions → Sous-programmes similaires
aux procédures, mais retournent une valeur.
Arguments → IN, OUT, IN OUT, NOCOPY
selon les besoins de passage de paramètres.
Exécution → Via BEGIN…END, CALL,
EXECUTE ou même dans des requêtes pour
les fonctions.
Utilisation avancée → Fonctions avec BULK
COLLECT, tableaux d’objets, fonctions sans
bloc, etc.
Métadonnées → Les vues USER_SOURCE,
ALL_SOURCE, DBA_SOURCE permettent de
consulter le code.
Maintenance → Compilation avec ALTER,
suppression avec DROP.
Packages
🔹 Definition
Un package est une unité logique qui permet
de regrouper plusieurs objets PL/SQL tels
que :
Des fonctions
Des procédures
Des variables globales
Des types
Des curseurs
📌 Il facilite l'organisation, la maintenance et la
sécurité du code PL/SQL.
🔹 Exemples de création
🔹Package avec variables
globales
✅ Résumé
Élément Description
Un regroupement d’objets
Package PL/SQL (procédures, fonctions,
curseurs, variables globales).
Partie publique visible du
Spécification
package (déclarations).
April 14, 2025
92
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
Élément Description
Partie privée avec les
Corps
implémentations.
Organisation, encapsulation,
Avantages
réutilisabilité, performance.
Curseurs, tableaux, validation
Fonctionnalit
conditionnelle, exécution
és avancées
globale.
DECLENCHEUR
Un déclencheur (trigger) est un objet PL/SQL
stocké en base qui permet d’exécuter
automatiquement un bloc d’instructions
lorsqu’un événement LMD (INSERT,
UPDATE, DELETE) survient sur une table.
April 14, 2025
93
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
🔹 Syntaxe générale
Exemple
🔹 RAISE_APPLICATION_ERROR
🔹 Déclencheur niveau
enregistrement
🔹 OLD et NEW
🔹 Clause referencing
🔹Déclencheur conditionnel
✅ Résumé
Les déclencheurs (ou triggers) en PL/SQL sont
des objets stockés dans la base de données
permettant l'exécution automatique
d'instructions lorsqu’un événement LMD
(INSERT, UPDATE, DELETE) survient sur une
table.
✅ Principales caractéristiques :
April 14, 2025
10
0
Professeur Mr. Reda Korikache Crée par AMRANE Mohammed-Amine
Classe Culture digitale Filiére S2ID
Conclusion
En conclusion, PL/SQL s'avère être un langage
puissant et essentiel pour la gestion des bases de
données Oracle. Grâce à sa capacité à manipuler les
données de manière flexible et à automatiser les