Aller au contenu

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 :

  1. déclare une variable
  2. lui affecte une valeur
  3. 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:

  1. À l’intérieur d’un autre bloc PL/SQL
  2. 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)