PLSQL1
PLSQL1
PLSQL1
PLAN
q Introduction,
q Avantages de PL/SQL,
q Les principales caractéristiques du PL / SQL,
q Les variables et les constantes,
q Les instructions de base
q Interaction avec la base de données à partir de PL/SQL
q Les curseurs
q Gestion des exceptions
q Les procédures, Les fonctions…
q Les triggers
Introduction
CODE PL/SQL
Pour le fournisseur N°1 Procedure :
IF … THEN
Si Moyenne(prix) >2000
Augmenter le prix de 5% ELSEIF
Sinon
Augmenter le prix de 3% ELSE
END IF
Avantage du langage PL/SQL
1. Section déclaration
2. Section corps du bloc
3. Section traitement des erreurs
Structure de bloc PL/SQL
DECLARE (facultatif)
BEGIN (obligatoire)
EXCEPTION (facultatif)
END; (obligatoire)
Structure de bloc PL/SQL
BEGIN
DBMS_OUTPUT.put_line (’ Bonjour tout le monde’);
END ;
/
PL / SQL
Déclaration des variables
Syntaxe :
identifier [CONSTANT] datatype [NOT NULL]
[:= | DEFAULT expr];
Exemples
:
DECLARE
v_DateNaissance DATE;
v_NDept NUMBER(2) NOT NULL := 10;
v_Ville VARCHAR2(13) := ’Rabat';
c_ CodeP CONSTANT NUMBER := 1400;
v_valide BOOLEAN NOT NULL := TRUE;
Déclarer des variables PL/SQL
v Les types d’oracle
Déclarer des variables avec l'attribut %TYPE
...
v_Nom client.nom%TYPE;
v_age NUMBER(7,2);
v_min_age v_age%TYPE := 10;
...
emp_record emp_record_type;
...
IF-THEN-ELSIF
v L'instruction IF-ELSE est une des premières structures conditionnelles que l'on
apprend en programmation. Elle est composée d'une condition. Si cette condition
est vraie, alors les instructions après le IF sont exécutées. Si la condition est
fausse, se sont les instructions sous le ELSE qui sont exécutées.
Exemple :
. . .
IF v_start > 100 THEN
v_start := 2 * v_start;
Instruction Case
Dans le langage SQL, la commande “CASE … WHEN …” permet d’utiliser
des conditions de type “si / sinon” (cf. if / else) similaire à un langage de
programmation pour retourner un résultat disponible entre plusieurs
possibilités
Exemple :
DECLARE
Mention char(1);
BEGIN
CASE
WHEN Mention =‘T’ THEN
DBMS_OUTPUT.PUT_LINE(’Mention Très bien’);
WHEN Mention =‘B' THEN
DBMS_OUTPUT.PUT_LINE('Mention bien’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Mention Passable’);
END CASE;
END;
Instructions de base
Les boucles
Instructions de base
Boucle simple
Exemple :
DECLARE
Compte Number:=0;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(Compte);
compte := compte + 1;
EXIT WHEN compte > 10;
END LOOP;
END;
Instructions de base
Boucle FOR
Exemple :
DECLARE
BEGIN
FOR i IN 1..10 LOOP
DBMS_OUTPUT.PUT_LINE( i );
END LOOP;
END;
Instructions de base
Boucle WHILE
Exemple :
DECLARE
i INTEGER;
BEGIN
While i < 10 LOOP
DBMS_OUTPUT.PUT_LINE( i );
i:=i+1;
END LOOP;
END;
PL / SQL
Interaction avec la base de données
Les collections
La clause INTO permet de passer des valeurs d’une table dans des variables
Exemple :
DECLARE
v_id NUMBER(4);
v_ville varchar(20);
BEGIN
SELECT id_Emp, ville_Emp
INTO v_id, v_ville
FROM Employe
WHERE nom_Emp= ’Ahmadi';
...
END;
Interaction avec la base de données
DECLARE
v_salaire employe.salaire%TYPE := 2000;
BEGIN
UPDATE employe
SET salaire = salaire + v_salaire
WHERE service= ’commercial';
END;
Exemples
DECLARE
Emp_record Employees%ROWTYPE;
...
BEGIN
SELECT * INTO Emp_record
FROM Employees
WHERE ...
Gestion des tableaux
Un tableau en PL/SQL est en fait une table qui ne comporte qu’une seule colonne. Cette
colonne ne peut correspondre qu’à un type scalaire et non à un type composé (table ou
record).
La structure de données nécessaire pour gérer une table ORACLE nécessitera donc
autant de types tables que la table possède de colonnes. On pourra éventuellement
regrouper ces tables à l’intérieur d’un RECORD ( Enregistrement).
0 1 2 3 4 5
Text0 Text1 Text2 Text3 Text4 Text5
DECLARE
TYPE nom_type_tableau IS TABLE OF VARCHAR(20)
INDEX BY BINARY_INTEGER;
-- Déclaration de la variable tab de type nom_type_tableau
tab nom_type_tableau ;
BEGIN
tab(1) := ‘ligne 1’ ;
tab(2) := ‘ligne 2’ ;
Exemple :
IF table_name.EXISTS(1) THEN
INSERT INTO ...
...