PL/SQL - Syntaxe de Base
Bienvenue, futurs programmeurs ! Aujourd'hui, nous plongeons dans le monde passionnant du PL/SQL. Ne vous inquiétez pas si vous n'avez jamais écrit une ligne de code auparavant - nous allons commencer frånchement et construire vos connaissances pas à pas. À la fin de ce tutoriel, vous serez en mesure d'écrire vos premiers programmes PL/SQL avec confiance !
L'Exemple 'Hello World'
Commençons par le programme traditionnel "Hello World". C'est un rites de passage pour chaque programmeur, et c'est une excellente façon de se familiariser avec la syntaxe PL/SQL.
BEGIN
DBMS_OUTPUT.PUT_LINE('Bonjour, le Monde !');
END;
/
Décomposons cela :
-
BEGIN
: Ce mot-clé marque le début de notre bloc PL/SQL. -
DBMS_OUTPUT.PUT_LINE('Bonjour, le Monde !');
: Cette ligne affiche notre message. Pensez à cela comme la manière du PL/SQL de nous parler. -
END;
: Cela marque la fin de notre bloc PL/SQL. -
/
: Ce trait d'union inverse indique à SQL*Plus d'exécuter le bloc PL/SQL.
Lorsque vous exécutez ce code, vous verrez "Bonjour, le Monde !" affiché sur votre écran. Félicitations ! Vous venez d'écrire votre premier programme PL/SQL.
Les Identifiants PL/SQL
Les identifiants sont les noms que nous donnons aux différents éléments de programme tels que les variables, les procédures et les fonctions. Ils sont comme des étiquettes de nom pour différentes parties de notre code. Voici les règles pour créer des identifiants :
- Doit commencer par une lettre (A-Z ou a-z)
- Peut être suivi par des lettres, des chiffres (0-9), des signes de dollar ($), des tirets bas (_), ou des signes de pouce (#)
- Ne peut pas être plus long que 30 caractères
- Ne peut pas être un mot réservé (comme BEGIN, END, IF, etc.)
Voyons quelques exemples :
DECLARE
employee_name VARCHAR2(50);
salary NUMBER;
dept_id NUMBER(5);
BEGIN
-- Le code va ici
END;
/
Dans cet exemple, employee_name
, salary
et dept_id
sont tous des identifiants valides.
Les Délimiteurs PL/SQL
Les délimiteurs sont des caractères ou des symboles spéciaux qui ont une signification particulière dans le PL/SQL. Ils sont comme les signes de ponctuation dans une phrase, aidant à structurer et à séparer différentes parties de notre code.
Voici un tableau des délimiteurs courants du PL/SQL :
Délimiteur | Description |
---|---|
; | Terminateur d'instruction |
% | Indicateur d'attribut |
. | Sélecteur de composant |
( ) | Encadre une liste de paramètres |
, | Séparateur de paramètres |
:= | Opérateur d'affectation |
=> | Opérateur d'association |
-- | Indicateur de commentaire sur une ligne |
/ / | Indicateurs de commentaires multilignes |
Voyons quelques-uns de ceux-ci en action :
DECLARE
v_count NUMBER := 0; -- Opérateur d'affectation
v_name VARCHAR2(50) := 'John Doe';
BEGIN
v_count := v_count + 1; -- Terminateur d'instruction
DBMS_OUTPUT.PUT_LINE('Nom : ' || v_name); -- Sélecteur de composant
END;
/
Les Commentaires PL/SQL
Les commentaires sont comme des post-it dans votre code. Ils sont ignorés par le compilateur mais peuvent être extrêmement utiles pour expliquer ce que fait votre code. Il y a deux types de commentaires dans le PL/SQL :
- Commentaires sur une ligne : Commencent par
--
- Commentaires multilignes : Entourés par
/*
et*/
Voici un exemple :
DECLARE
-- Cela est un commentaire sur une ligne
v_pi NUMBER := 3.14159;
BEGIN
/*
Cela est un commentaire multiligne.
Il peut s'étendre sur plusieurs lignes.
Très utile pour des explications plus longues.
*/
DBMS_OUTPUT.PUT_LINE('La valeur de pi est : ' || v_pi);
END;
/
Les Unités de Programme PL/SQL
Les unités de programme PL/SQL sont les éléments constitutifs des applications PL/SQL. Ils sont comme des recettes dans un livre de cuisine - chacun décrit comment effectuer une tâche spécifique. Les principaux types sont :
- Blocs Anonymes
- Procédures
- Fonctions
- Packages
Voyons des exemples de chacun :
1. Bloc Anonyme
Nous avons déjà vu cela dans notre exemple "Hello World". C'est un bloc de code qui n'est pas sauvegardé dans la base de données.
BEGIN
DBMS_OUTPUT.PUT_LINE('Ceci est un bloc anonyme');
END;
/
2. Procédure
Une procédure est un bloc PL/SQL nommé qui effectue une action spécifique.
CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Bonjour, ' || p_name || '!');
END;
/
-- Pour appeler la procédure :
BEGIN
greet_user('Alice');
END;
/
3. Fonction
Une fonction est similaire à une procédure, mais elle renvoie une valeur.
CREATE OR REPLACE FUNCTION calculate_area(p_radius IN NUMBER)
RETURN NUMBER IS
v_pi CONSTANT NUMBER := 3.14159;
BEGIN
RETURN v_pi * p_radius * p_radius;
END;
/
-- Pour utiliser la fonction :
DECLARE
v_area NUMBER;
BEGIN
v_area := calculate_area(5);
DBMS_OUTPUT.PUT_LINE('La surface est : ' || v_area);
END;
/
4. Package
Un package est une collection d'éléments PL/SQL apparentés comme des procédures, des fonctions, des variables, et d'autres objets PL/SQL.
CREATE OR REPLACE PACKAGE math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
END math_operations;
/
CREATE OR REPLACE PACKAGE BODY math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a + b;
END add_numbers;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a - b;
END subtract_numbers;
END math_operations;
/
-- Pour utiliser le package :
DECLARE
v_result NUMBER;
BEGIN
v_result := math_operations.add_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 + 5 = ' || v_result);
v_result := math_operations.subtract_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 - 5 = ' || v_result);
END;
/
Et voilà ! Nous avons couvert la syntaxe de base du PL/SQL, des programmes simples "Hello World" aux structures plus complexes comme les packages. Souvenez-vous, apprendre à programmer est comme apprendre une nouvelle langue - cela nécessite de la pratique et de la patience. N'ayez pas peur d'expérimenter avec les exemples de code, de les modifier, et de voir ce qui se passe. C'est ainsi que vous véritablement internaliserez ces concepts et deviendrez un programmeur PL/SQL compétent.
Bonne programmation, et puissent vos requêtes toujours renvoyer les résultats que vous attendez !
Credits: Image by storyset