0% ont trouvé ce document utile (0 vote)
8 vues9 pages

RecapSyntaxe PL SQL

PL/SQL, introduit par Oracle dans les années 1980, est un langage procédural complémentaire à SQL, permettant de surmonter ses limitations en matière de logique métier, de boucles et de gestion des erreurs. Il a évolué à travers plusieurs versions d'Oracle, ajoutant des fonctionnalités comme les procédures stockées, les collections et l'optimisation des performances. PL/SQL est utilisé pour créer des applications critiques dans divers secteurs tels que la banque et les télécommunications.

Transféré par

Ulric Kingue
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues9 pages

RecapSyntaxe PL SQL

PL/SQL, introduit par Oracle dans les années 1980, est un langage procédural complémentaire à SQL, permettant de surmonter ses limitations en matière de logique métier, de boucles et de gestion des erreurs. Il a évolué à travers plusieurs versions d'Oracle, ajoutant des fonctionnalités comme les procédures stockées, les collections et l'optimisation des performances. PL/SQL est utilisé pour créer des applications critiques dans divers secteurs tels que la banque et les télécommunications.

Transféré par

Ulric Kingue
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

0-HISTORIQUE DE PL/SQL

0.1 Les origines


PL/SQL a été introduit par Oracle Corporation à la fin des années 1980, à un moment où les
bases de données relationnelles étaient de plus en plus utilisées pour gérer de grands volumes
de données.
À cette période, SQL était le langage standard pour interagir avec les bases de données, mais
il présentait une grande limitation :

SQL est déclaratif → on dit quoi faire mais pas comment le faire.

Cette limite devenait problématique pour :

• automatiser des traitements,


• faire des calculs complexes,
• contrôler la logique métier,
• répéter des actions.

Oracle décide alors de créer un langage complémentaire à SQL, capable de gérer la logique
procédurale directement dans la base : PL/SQL.

0.2 Dates importantes


Année Événement
1988 Introduction officielle de PL/SQL avec Oracle 6
1991 Oracle 7 → apparition des procédures stockées & triggers
1997 Oracle 8 → collections et objets PL/SQL
1999 Oracle 8i → BULK COLLECT et FORALL
2001 Oracle 9i → SQL dynamique amélioré
2004 Oracle 10g → performances PL/SQL optimisées
2007 Oracle 11g → compilation native, nouveaux types
2013 Oracle 12c → sécurisation et performances accrues
2018 Oracle 18c/19c → fonctionnalités Cloud & optimisation automatique

0.3 Pourquoi Oracle a créé PL/SQL ?


Parce que SQL seul ne suffisait pas.
SQL :

• ne gère pas les boucles,


• ne gère pas les conditions complexes,
• ne permet pas de stocker des variables,
• ne permet pas de créer des programmes réutilisables,

Recap - Programmation PL/SQL - MASI 1


• ne gère pas les exceptions.

PL/SQL ajoute une vraie couche de programmation au moteur SQL, permettant de créer :

• des applications bancaires,


• des systèmes d’entreprise critiques,
• des traitements massifs,
• des workflows complets,
• des calculs automatisés.

Oracle cible dès le départ les banques, les télécoms, les hôpitaux, les gouvernements, etc.

1 – INTRODUCTION À PL/SQL
1.1 Qu’est-ce que PL/SQL ?
PL/SQL signifie Procedural Language/SQL. C’est un langage procédural intégré à Oracle.
Il permet de combler les limites de SQL simple :

• Ajouter des variables


• Gérer les conditions, les boucles
• Faire du traitement séquentiel
• Créer des procédures, fonctions, triggers
• Automatiser des opérations

PL/SQL = SQL + IF + BOUCLES + PROCEDURES + ERREURS

Il est exécuté par le moteur SQL*Plus, Oracle Forms, Oracle DB, Oracle Apex…

1.2 Avantages de PL/SQL


• Performances élevées (moins d’allers-retours réseau)
• Sécurité (accès contrôlé)
• Réutilisation du code (packages, fonctions)
• Robustesse (gestion d’erreurs avancée)
• Productivité (scripts automatisés)

1.3 Architecture de PL/SQL


Un programme est compilé dans Oracle, puis stocké en code intermédiaire.
Il peut être exécuté très rapidement grâce au compilateur PL/SQL intégré au moteur Oracle.

Recap - Programmation PL/SQL - MASI 2


2 – STRUCTURE D’UN BLOC PL/SQL
Structure générale :
DECLARE
-- Variables
BEGIN
-- Instructions
EXCEPTION
-- Gestion des erreurs
END;
/

Sections détaillées :

Section Description
DECLARE Déclaration des variables (optionnelle)
BEGIN Zone d’exécution
EXCEPTION Traitement des erreurs
END Fin du bloc

3 – DÉCLARATION ET TYPES DE
DONNÉES
3.1 Les types de données
Numériques

• NUMBER(p,s)
• PLS_INTEGER
• BINARY_INTEGER

Chaînes

• VARCHAR2(n)
• CHAR(n)
• CLOB

Dates

• DATE
• TIMESTAMP
• INTERVAL

Booléens

Recap - Programmation PL/SQL - MASI 3


• BOOLEAN (existe en PL/SQL mais pas en SQL)

3.2 Déclarer une variable


DECLARE
v_nom VARCHAR2(30);
v_age NUMBER(3) := 25;
v_salaire NUMBER DEFAULT 250000;

3.3 Constantes
pi CONSTANT NUMBER := 3.14;

3.4 Attributs %TYPE et %ROWTYPE


%TYPE

Prend le même type qu’une colonne.

DECLARE
v_sal [Link]%TYPE;

%ROWTYPE

Prend toute une ligne.

DECLARE
v_emp employe%ROWTYPE;

4 – LES INSTRUCTIONS
CONDITIONNELLES
4.1 IF – THEN – ELSE
IF v_age > 18 THEN
DBMS_OUTPUT.PUT_LINE('Adulte');
ELSE
DBMS_OUTPUT.PUT_LINE('Mineur');
END IF;

4.2 ELSIF

Recap - Programmation PL/SQL - MASI 4


IF note >= 16 THEN
mention := 'Très Bien';
ELSIF note >= 14 THEN
mention := 'Bien';
ELSIF note >= 12 THEN
mention := 'Assez Bien';
ELSE
mention := 'Insuffisant';
END IF;

4.3 CASE
CASE sexe
WHEN 'M' THEN lib := 'Homme';
WHEN 'F' THEN lib := 'Femme';
ELSE lib := 'Autre';
END CASE;

5 – BOUCLES
5.1 Boucle simple
LOOP
compteur := compteur + 1;
EXIT WHEN compteur = 10;
END LOOP;

5.2 Boucle WHILE


WHILE v_x < 100 LOOP
v_x := v_x + 10;
END LOOP;

5.3 Boucle FOR


FOR i IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE('i = ' || i);
END LOOP;

5.4 Boucle FOR inversée


FOR i IN REVERSE 10..1 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;

Recap - Programmation PL/SQL - MASI 5


6 – CURSEURS
Un curseur permet de parcourir plusieurs lignes d’une table.

6.1 Curseur explicite


DECLARE
CURSOR c IS SELECT nom, salaire FROM employe;
v_nom [Link]%TYPE;
v_sal [Link]%TYPE;
BEGIN
OPEN c;
LOOP
FETCH c INTO v_nom, v_sal;
EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_nom || ' - ' || v_sal);
END LOOP;
CLOSE c;
END;
/

6.2 Curseur avec paramètres


CURSOR c(p_dep NUMBER) IS
SELECT nom FROM employe WHERE departement = p_dep;

6.3 Curseurs implicites


Oracle gère automatiquement :

• SQL%NOTFOUND
• SQL%ROWCOUNT
• SQL%FOUND

Exemple :

UPDATE employe SET salaire = salaire + 50000 WHERE departement = 2;

IF SQL%ROWCOUNT > 0 THEN


DBMS_OUTPUT.PUT_LINE('Mise à jour faite');
END IF;

Recap - Programmation PL/SQL - MASI 6


7 – EXCEPTIONS (GESTION DES
ERREURS)
7.1 Exceptions prédéfinies
• NO_DATA_FOUND
• TOO_MANY_ROWS
• ZERO_DIVIDE
• DUP_VAL_ON_INDEX

Exemple :

BEGIN
SELECT nom INTO v_nom FROM employe WHERE id = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Aucun employé trouvé');
END;

7.2 Exceptions personnalisées


DECLARE
e_solde_negatif EXCEPTION;
BEGIN
IF solde < 0 THEN
RAISE e_solde_negatif;
END IF;
EXCEPTION
WHEN e_solde_negatif THEN
DBMS_OUTPUT.PUT_LINE('Solde négatif interdit');
END;

8 – PROCÉDURES, FONCTIONS,
PACKAGES
8.1 Procédures
CREATE OR REPLACE PROCEDURE ajouter_client(p_nom VARCHAR2) IS
BEGIN
INSERT INTO client(nom) VALUES(p_nom);
END;
/

8.2 Fonctions

Recap - Programmation PL/SQL - MASI 7


CREATE OR REPLACE FUNCTION getSalaire(p_id NUMBER)
RETURN NUMBER IS
v_sal NUMBER;
BEGIN
SELECT salaire INTO v_sal FROM employe WHERE id = p_id;
RETURN v_sal;
END;
/

8.3 Packages
Spécification
CREATE OR REPLACE PACKAGE pkg_employe IS
PROCEDURE ajouter(...);
FUNCTION total RETURN NUMBER;
END;
/

Corps
CREATE OR REPLACE PACKAGE BODY pkg_employe IS
...
END;
/

9 – TRIGGERS
Trigger Before Insert
CREATE OR REPLACE TRIGGER trg_bi_employe
BEFORE INSERT ON employe
FOR EACH ROW
BEGIN
:new.date_creation := SYSDATE;
END;
/

Trigger After Update


CREATE OR REPLACE TRIGGER trg_au_log
AFTER UPDATE ON employe
FOR EACH ROW
BEGIN
INSERT INTO log_table VALUES(...);
END;
/

Recap - Programmation PL/SQL - MASI 8


10 – TABLEAUX (COLLECTIONS)
PL/SQL possède trois types de collections :

1. VARRAY
2. Nested Table
3. Associative Array (index-by)
Exemple :

TYPE t_noms IS TABLE OF VARCHAR2(30);


v_liste t_noms := t_noms('Jean', 'Paul', 'Marc');

11 – BULK COLLECT ET FORALL


Pour optimiser les performances sur les gros volumes.

11.1 BULK COLLECT


SELECT nom BULK COLLECT INTO v_noms FROM employe;

11.2 FORALL
FORALL i IN v_ids.FIRST..v_ids.LAST
DELETE FROM employe WHERE id = v_ids(i);

12 – DYNAMIQUE SQL
Avec EXECUTE IMMEDIATE

EXECUTE IMMEDIATE 'DELETE FROM employe WHERE id = :x'


USING 10;

Recap - Programmation PL/SQL - MASI 9

Vous aimerez peut-être aussi