Guide des variables PL/SQL pour débutants

Salut à toi, futur magicien PL/SQL ! Aujourd'hui, nous allons entreprendre un voyage passionnant à la découverte du monde des variables PL/SQL. Ne t'inquiète pas si tu es nouveau dans le monde de la programmation – je serai ton guide bienveillant, et nous avancerons pas à pas. À la fin de ce tutoriel, tu manipuleras les variables comme un pro !

PL/SQL - Variables

Qu'est-ce que les variables ?

Avant de plonger dedans, comprehensionnons ce qu'elles sont. Les variables sont comme de petits conteneurs dans la mémoire de ton ordinateur qui stockent des données. Comme tu pourrais utiliser différents boîtes pour stocker différents types d'objets dans ta chambre, nous utilisons des variables pour stocker différents types de données dans nos programmes.

Déclaration de variables en PL/SQL

En PL/SQL, déclarer une variable, c'est comme se présenter à quelqu'un de nouveau. Tu dis au programme : "Salut, je suis là, et voici ce que je peux contenir !"

Syntaxe de base

La syntaxe de base pour déclarer une variable en PL/SQL est :

nom_variable type_donnee;

Décomposons cela :

  • nom_variable est ce que tu choisis d'appeler ta variable
  • type_donnee est le type de données que la variable peut contenir

Exemples

DECLARE
mon_nom VARCHAR2(50);
mon_age NUMBER;
est_etudiant BOOLEAN;
BEGIN
-- Ton code ici
END;

Dans cet exemple :

  • mon_nom peut contenir jusqu'à 50 caractères
  • mon_age peut contenir un nombre
  • est_etudiant peut être VRAI ou FAUX

Souviens-toi, en PL/SQL, nous déclarons les variables dans la section DECLARE, avant l'instruction BEGIN.

Types de données courants

Voici un tableau des types de données courants que tu rencontreras :

Type de données Description Exemple
VARCHAR2 Chaîne de caractères de longueur variable 'Bonjour, monde !'
NUMBER Valeurs numériques 42, 3.14
DATE Valeurs de date et heure '01-JAN-2023'
BOOLEAN Valeurs logiques (VRAI/FAUX) VRAI

Initialisation des variables en PL/SQL

Maintenant que nous avons déclaré nos variables, donnons-leur des valeurs ! Ce processus s'appelle l'initialisation.

Initialisation de base

Tu peux initialiser une variable directement lorsque tu la déclares :

DECLARE
salutation VARCHAR2(20) := 'Bonjour, PL/SQL !';
numero_heureux NUMBER := 7;
BEGIN
DBMS_OUTPUT.PUT_LINE(salutation);
DBMS_OUTPUT.PUT_LINE('Mon numéro heureux est : ' || numero_heureux);
END;

Dans cet exemple, nous disons "Bonjour" à PL/SQL et partageons notre numéro heureux. Le := est l'opérateur d'affectation en PL/SQL.

Initialisation avec NULL

Parfois, tu peux vouloir déclarer une variable mais ne pas lui donner de valeur pour le moment. Dans ce cas, tu peux utiliser NULL :

DECLARE
entree_utilisateur VARCHAR2(100) := NULL;
BEGIN
-- Nous получим entrée de l'utilisateur plus tard
END;

Portée des variables en PL/SQL

La portée des variables est comme le quartier d'une variable – elle définit où la variable peut être vue et utilisée.

Variables locales

Les variables déclarées dans un bloc sont locales à ce bloc. Elles ne peuvent pas être vues à l'extérieur de leur bloc.

DECLARE
variable_exterieure VARCHAR2(20) := 'Je suis à l'extérieur !';
BEGIN
DBMS_OUTPUT.PUT_LINE(variable_exterieure);

DECLARE
variable_interieure VARCHAR2(20) := 'Je suis à l'intérieur !';
BEGIN
DBMS_OUTPUT.PUT_LINE(variable_exterieure);  -- Ça fonctionne
DBMS_OUTPUT.PUT_LINE(variable_interieure);  -- Ça fonctionne aussi
END;

DBMS_OUTPUT.PUT_LINE(variable_exterieure);  -- Ça fonctionne
-- DBMS_OUTPUT.PUT_LINE(variable_interieure);  -- Ça causerait une erreur
END;

Dans cet exemple, variable_interieure est comme un ami timide qui ne sort que dans le bloc intérieur. Le bloc extérieur ne peut pas le voir !

Variables globales

Si tu veux que une variable soit visible partout dans ton programme, tu peux la déclarer dans le bloc le plus externe.

DECLARE
variable_globale NUMBER := 100;

PROCEDURE imprimer_global IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Valeur de la variable globale : ' || variable_globale);
END;

BEGIN
imprimer_global;
variable_globale := variable_globale + 50;
imprimer_global;
END;

Ici, variable_globale est comme un enfant populaire – tout le monde le connaît et peut interagir avec lui !

Affectation des résultats de requête SQL aux variables PL/SQL

Une des choses les plus impressionnantes à propos de PL/SQL est sa capacité à s'intégrer harmonieusement avec SQL. Tu peux utiliser des requêtes SQL pour affecter des valeurs à tes variables PL/SQL !

Requête sur une seule ligne

DECLARE
nom_employe VARCHAR2(100);
salaire_employe NUMBER;
BEGIN
SELECT first_name || ' ' || last_name, salary
INTO nom_employe, salaire_employe
FROM employees
WHERE employee_id = 100;

DBMS_OUTPUT.PUT_LINE('Employé : ' || nom_employe);
DBMS_OUTPUT.PUT_LINE('Salaire : $' || salaire_employe);
END;

Dans cet exemple, nous récupérons le nom et le salaire d'un employé à partir de la table employees et les stockons dans nos variables PL/SQL.

Requête sur plusieurs lignes

Pour plusieurs lignes, nous devons utiliser un curseur ou une collecte en bloc. Voici un exemple avec une collecte en bloc :

DECLARE
TYPE type_table_nom IS TABLE OF VARCHAR2(100);
noms_employes type_table_nom;
BEGIN
SELECT first_name || ' ' || last_name
BULK COLLECT INTO noms_employes
FROM employees
WHERE department_id = 60;

FOR i IN 1..noms_employes.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Employé ' || i || ' : ' || noms_employes(i));
END LOOP;
END;

Ce script récupère tous les noms des employés du département 60 et les stocke dans une table PL/SQL. Nous parcourons ensuite cette table pour imprimer chaque nom.

Et voilà, les amis ! Nous avons couvert les bases des variables PL/SQL, de la déclaration à l'initialisation, la portée, et même comment les remplir avec les résultats des requêtes SQL. Souviens-toi, la pratique rend parfait, alors n'hésite pas à expérimenter avec ces concepts.

Avant de me quitter, voici une petite blague de programmateur pour toi : Pourquoi le programmeur a-t-il démissionné ? Parce qu'il ne recevait pas d'arrays (de hausse de salaire) ! ?

Bonne programmation, et puissent tes variables toujours se comporter bien !

Credits: Image by storyset