Introduction au PL/SQL¶
Le PL/SQL (Procedural Language / SQL) est un langage procédural développé par Oracle. Il permet d’ajouter de la logique, des conditions, des boucles et des variables à SQL, afin de créer des programmes exécutés directement dans la base de données.
En PL/SQL, tout le code est organisé sous forme de blocs.
Structure de base d’un bloc PL/SQL¶
Un bloc PL/SQL est composé de trois parties principales :
DECLARE
-- Déclaration des variables
BEGIN
-- Instructions exécutables
EXCEPTION
-- Traitement des erreurs captées
END;
/
DECLARE
- Section optionnelle
- Sert à déclarer les variables, constantes ou curseurs
- Si aucun élément n’est déclaré, cette partie peut être omise
BEGIN
- Obligatoire
- Indique le début des instructions logiques (la programmation)
EXCEPTION
- Optionnel
- Délimite la zone de traitement des erreurs captées lors du traitement
END;
- Obligatoire
- Indique la fin du bloc PL/SQL
La barre oblique /
- Très importante
- Placée seule sur une ligne
-
Sert à envoyer et exécuter le bloc
Sans /, le code peut être enregistré mais ne sera pas exécuté
Exemple :
DECLARE
v_message VARCHAR2(50);
BEGIN
v_message := 'Bonjour de la part de PL/SQL';
DBMS_OUTPUT.PUT_LINE(v_message);
END;
/
📌 Ce bloc :
- déclare une variable
- lui affecte une valeur
- affiche le message à l’écran
4 Types de blocs¶
Les blocs PL/SQl ont plusieurs utilités, du bloc anonyme qui s'exécute une seule fois j'ausqu'aux Packages qui sont des classes complètes de blocs de traitement.
Voici 4 blocs les plus fréquents :
- Bloc anonyme : non stocké, exécuté au besoin
- Procédure (procedure) : stockée, appelée par d'autres blocs ou en tant que traitement ponctuel
- Fonction (function) : stockée, appelée par d'autres blocs ou des requêtes
- Déclencheur (trigger) : stocké, associé à une table pour effectuer des validations
Le bloc anonyme¶
- Sans nom
- Non stocké dans la base de données
- Utilisé pour des tests ou des traitements ponctuels
Exemple de block anonyme déjà utilisé dans le cours :
Bloc pour effacer toutes les tables et séquences :
BEGIN
FOR rec IN (SELECT object_name FROM user_objects WHERE object_type='TABLE') LOOP
EXECUTE IMMEDIATE 'DROP TABLE ' || rec.object_name || ' CASCADE CONSTRAINTS';
END LOOP;
FOR rec IN (SELECT object_name FROM user_objects WHERE object_type='SEQUENCE' ) LOOP
EXECUTE IMMEDIATE 'DROP SEQUENCE' || rec.object_name ;
END LOOP;
END;
/
La procédure¶
- Déclarée avec un nom
- Stockée dans la base de données
- Utilisée pour exécuter une action
- Ne retourne pas de valeur directement
Syntaxe :
CREATE OR REPLACE PROCEDURE nom_procedure IS
... --déclaration de variables au besoin
BEGIN
... --traitement
END;
/
Utilisation :
Compilée et sauvegardée à la BD, une procédure peut être utilisée:
- À l’intérieur d’un autre bloc PL/SQL
- À partir d'une ligne de commande
Exemple :
--Création de la procédure
CREATE OR REPLACE PROCEDURE dire_bonjour IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Bonjour depuis une procédure');
END;
/
--Exécution de la procédure
BEGIN
dire_bonjour;
END;
/
Utilisation typique :
- insertions multiples
- mises à jour
- traitements automatisés et programmées dans le temps
La fonction¶
Une fonction est similaire à une procédure, mais elle :
- Retourne obligatoirement une valeur
- Est souvent utilisée dans des expressions ou des requêtes SQL
Syntaxe :
CREATE OR REPLACE FUNCTION nom_fonction(paramètres optionnels)
RETURN type_retourné IS
... --déclaration de variables au besoin
BEGIN
... --traitement
END;
/
Utilisation :
Compilée et sauvegardée dans la BD, une fonction peut être utilisée:
- À l’intérieur d’un autre bloc PL/SQL
- Dans une requête SQL
Exemple :
--Création de la fonction
CREATE OR REPLACE FUNCTION calculerBonus(salaire NUMBER, pourcentage NUMBER)
RETURN NUMBER IS
BEGIN
RETURN salaire * pourcentage;
END;
/
--Utilisation de la fonction
SELECT noEmploye, salaireEmploye, calculerBonus(salaireEmploye, 0.05) AS "Bonus 5%"
FROM employe;
Utilisation typique :
- Calculs fréquents dans les extractions
- Simplifier les requêtes
- Découpage des blocs PL/SQL pour simplifier le code
Rappel des règles du Clean code :
- Une fonction fait une seule action et elle le fait bien
Le déclencheur¶
Un déclencheur (trigger) en PL/SQL est un bloc qui s’exécute automatiquement lorsqu’un événement précis se produit dans la base de données.
Contrairement à une procédure ou une fonction :
- un trigger n’est jamais appelé manuellement
- il est déclenché par une action sur une table ou une vue
Syntaxe :
CREATE OR REPLACE TRIGGER nom_trigger
BEFORE [ou AFTER] INSERT [OR UPDATE OR DELETE] ON ma_table
FOR EACH ROW
BEGIN
-- Instructions PL/SQL
END;
/
Utilisation :
Une fois créé, le trigger se déclenche automatiquement lorsque l'événement (INSERT, UPDATE ou DELETE) est exécuté.
Il n'y a pas d'autre façon de déclencher un trigger.
Utilisation typique :
- Faire respecter des règles de gestion
(ex. interdire certaines modifications)
- Contrôler ou valider des données
(ex. vérifier une valeur complexe avant insertion)
- Automatiser des traitements
(ex. journaliser des changements)
- Réagir à des événements
(ex. mettre à jour une autre table après un INSERT)