0% ont trouvé ce document utile (0 vote)
84 vues31 pages

Le Langage PLSQL Resume

Le document décrit le langage PL/SQL qui permet de travailler de manière procédurale avec une base de données Oracle. PL/SQL combine les fonctionnalités du langage SQL avec des structures de contrôle et des variables comme en programmation procédurale.

Transféré par

Utilisateur 2
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)
84 vues31 pages

Le Langage PLSQL Resume

Le document décrit le langage PL/SQL qui permet de travailler de manière procédurale avec une base de données Oracle. PL/SQL combine les fonctionnalités du langage SQL avec des structures de contrôle et des variables comme en programmation procédurale.

Transféré par

Utilisateur 2
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

Le langage PL/SQL

1
Introduction
• Sql est un langage complet pour travailler sur une base de données, mais il
ne comporte pas d'instructions procédurales.
• PL/SQL comprend quant à lui :
• la partie LID de SQL (Select),
• la partie LMD de SQL (Update, Insert, Delete),
• la gestion des transactions (Commit, Rollback, Savepoint),
• les fonctions de Sql
• plus une partie procédurale (IF, WHILE, ...).

PL/SQL est donc un langage algorithmique complet.

Remarque : il ne comporte pas d'instructions de LDD (Alter, Create, Rename)


ni les instructions de contrôle comme (Grant et Revoke).
2
Introduction
• Tout comme SQL, PL/SQL peut être utilisé au sein des outils de la
famille Oracle comme : Sql*Plus, Sql*Forms, Sql*Pro, ....
• PL/SQL comporte donc des instructions SQL, pour bénéficier des
avantages du SQL et intègre d'autre part des instructions PL qui
permettent de gérer :
• des boucles (LOOP, FOR, WHILE, EXIT [WHEN], GOTO)
• des conditionnelles (IF, THEN, ELSIF, ELSE, END IF)
• des calculs et des fonctions,
• des sous-programmes,
• des packages (paquettage ou librairie ou module).

3
Structure d’un bloc
DECLARE
Déclarations de variables, constantes, exception

BEGIN
Section obligatoire contenant des commandes exécutables
Instructions SQL et PL/SQL
Possibilités de blocs fils (imbrication de blocs)

EXCEPTION
Traitement des exceptions (gestion des erreurs)

END ; Remarque :
/ Les sections Declare et Exception sont optionnelles. 4
Exemple de bloc
DECLARE
qte_stock number(5);

BEGIN
Select quantite into qte_stock from inventaire where produit='raquette tennis';
-- contrôle du stock suffisant --
If qte_stock > 0 then
update inventaire set quantite=quantite-1 where produit='raquette tennis';
insert into achat values ('raquette tennis', SYSDATE);
else
insert into acheter values ('Plus de raquettes de tennis',SYSDATE);
end if;
commit;
END ;
/
5
Les déclarations PL/SQL
• La partie déclarative dans un bloc PL/SQL, peut comporter trois types
de déclarations.
• Elle est délimitée par les mots-clé
• DECLARE, qui spécifie le début et
• BEGIN, qui signifie la fin de la déclaration et le début de la partie des
commandes.

• Les types de déclarations possibles dans cette partie sont les suivants :
• déclaration des variables et des constantes,
• déclaration de curseurs,
• déclaration des exceptions.

6
Les types de données
Types de données PL/SQL
Types Scalaires Types Composés
binary_integer record
natural
positive
decimal
float table
integer
real
smallint
number
char
long
varchar
varchar2
boolean
date
rowid
raw
long raw 7
Conversion de types
• Les conversions des types de données en PL/SQL, sont regroupées en
deux familles :
• les conversions explicites avec les fonctions définies dans Sql telles que
to_date, to_char, to_number.

• les conversions implicites sont réalisées automatiquement par PL/SQL.

8
Variables et constantes
• Les variables se définissent dans la partie DECLARE du bloc PL/SQL en
utilisant la syntaxe suivante :

nomvariable [CONSTANT]
{type | variable%TYPE | table.%ROWTYPE }
[NOT NULL]
[{:= | DEFAULT } expression PL/SQL]

9
Exemples de déclarations
DECLARE
Total number(9,2);
Nom char(10):='Fischer';
Longeur number not null := length (Nom) * 2;
Date_Creation Date;
Numero EMPLOYE.EMPNO%TYPE;
Dpt DEPARTEMENT%ROWTYPE;
Prenom Nom%TYPE;
Pi Constant Number:=3.14;
BEGIN
10
Assignement des variables
• Deux possibilités d'assignement ou d'affectation sont disponibles :
1. par l'opérateur d'affectation : ':=',
2. par la clause Select ... Into ... .

• La difficulté dans l'utilisation de la clause Select résulte du nombre de


lignes ou d'occurrences retourné.
• Si le Select retourne une et une seule ligne l'affectation s'effectue
correctement.

• Par contre,
Si le Select retourne 0 ligne : NO_DATA_FOUND ou
Si le Select retourne plusieurs lignes : TOO_MANY_ROWS
une erreur PL/SQL est générée.
11
Les tableaux
• Les tableaux sont conçus comme les tables de la base de données. Ils
possèdent une clé primaire (index) pour accéder aux lignes du
tableau.
• Un tableau, comme une table, ne possède pas de limite de taille. De
cette façon, le nombre d'éléments d'un tableau va croître
dynamiquement.

• Les tableaux peuvent posséder une colonne et une clé primaire. Par
contre ni la colonne, ni la clé primaire (index) ne peut être nommé.

• La colonne peut être de n'importe quel type scalaire, mais la clé


primaire doit être du type BINARY_INTEGER.
12
Déclarations d’un tableau
• Les tableaux PL/SQL doivent être déclarés en deux étapes :
1. Déclaration du type de la TABLE
2. Déclaration d'une table de ce type.

• La syntaxe pour déclarer un type TABLE dans la partie déclarative d'un bloc est :
TYPE nom_type IS TABLE OF
{typecolonne | variable%TYPE | table.column%TYPE } [NOT NULL]
INDEX BY BINARY_INTEGER ;
• nomtype : utilisé ensuite dans la déclaration des tables PL/SQL.
• typecolonne : type de données comme CHAR, DATE ou NUMBER.

• Lorsque le type est déclaré, vous pouvez déclarer des tableaux de ce type, ainsi :
nom_tab nom_type ;

• nom_tab : correspond à un tableau PL/SQL.


13
Accès aux éléments d’un tableau
• Pour accéder à un élément du tableau, vous devez spécifier une
valeur de clé primaire en respectant la syntaxe suivant :
nom_tab(valeur_cle_primaire) ;
• valeur_cle_primaire : doit être du type BINARY_INTEGER ( -231 -1 à 231
-1)

• Pour affecter la valeur d'une expression PL/SQL à un élément du
tableau utiliser la syntaxe suivante :
nom_tab(valeur_cle_primaire) := expression_plsql;

14
Exemple de tableau
DECLARE
TYPE nom_tabtype IS TABLE OF CHAR(25)
INDEX BY BINARY_INTEGER ;
...
tnom nom_tabtype ;
...
BEGIN
...
tnom(1):='Dupont Marc' ;
...
END ;
/
15
Les enregistrements
• Ladéclaration d'un enregistrement se fait également en en deux étapes :
1. Déclaration du type de l'enregistrement
2. Déclaration de la variable sur le type défini.

• TYPE nom_type IS RECORD


(champ {typechamp | table.column%TYPE } [NOT NULL],
champ {typechamp | table.column%TYPE } [NOT NULL],...)

• nomtype : utilisé ensuite dans la déclaration des tables PL/SQL.


• typecolonne : type de données comme CHAR, DATE ou NUMBER.

• Lorsque le type est déclaré, vous pouvez déclarer des enregistrements de ce type, ainsi :
nom_enr nom_type ;

• nom_enr : correspond à un Record PL/SQL.


16
Exemple Enregistrement
DECLARE
TYPE ADRESSE IS RECORD
( Numero smallint,
Rue char(35),
CodePost char(5),
Ville char(25),
Pays char(30) );

TYPE CLIENT IS RECORD


( NumCli smallint,
NomCli char(40),
AdrCli ADRESSE,
CA number) ;
monclient CLIENT;
BEGIN
...
monclient.NumCli:=1234;
monclient.NomCli:='Dupont SARL';
monclient.AdrCli.Numero:=10;
END ;
17
Variable de liaison
• Une variable de liaison est utilisée dans les blocs PL/SQL et dans SQL*PLUS.
• Elle est créée avec la commande VAR dans SQL*PLUS.

• Création de la variable dans SQL*PLUS : VAR [IABLE] [nom [type] ]


VAR maVar VARCHAR2(10)

• Utilisation dans un bloc : « :maVar »


Begin
:maVar := ‘bonjour’;
dbms_output.put_line(:maVar);
end;
• On accède à la variable avec un « : » devant. 18
Variable de liaison
• Création et initialisation de la variable dans SQL*PLUS
VAR maVar2 VARCHAR2(10);
EXEC :maVar2 := 'bonjour2';
Print :maVar2 ;

• EXEC permet d’exécuter une commande PLSQL, ici une affectation ( :=)
• Print permet d’afficher le contenu de la variable dans SQL*PLUS

• Utilisation dans un bloc :


BEGIN
dbms_output.put_line(:maVar2);
END; 19
Instruction d’entrée
• La saisie de la valeur d’une variable se fait en utilisant l’opérateur &
• Exemples :
• Prénom := &Prénom
• SELECT nomc, ville FROM CLIENT WHERE nom LIKE '%M&chaine.ET%';

• On peut également saisir la valeur d’une variable globale avec


l’instruction accept et cela en dehors du bloc PL/SQL :
• SQL>accept Vnom
• SQL>Ben Salah

20
Instructions de sortie
• Pour afficher un message à l’écran il suffit d’utiliser la commande Prompt
suivie d’un message. Cette commande est utilisée en dehors des blocs.
• SQL>prompt Bonjour à tous !
• SQL> Bonjour à tous !

• Pour afficher des résultats on utilise le package (ensemble de procédures et
fonctions) DBMS_OUTPUT.
• Tout d'abord, avant le bloc PL/SQL, on doit utiliser l'instruction :
• Set serveroutput on

Puis pour chaque affichage :
• dbms_output.put_line('texte'||X); -- (remarque : la concaténation de
chaînes de caractères avec : ||)
21
Exemple
SQL>SET SERVEROUTPUT ON

DECLARE
V_ville varchar2(20) ;
code Client.Codc%Type;

BEGIN
code:=&code;
SELECT ville INTO V_ville FROM Client WHERE codc=code;

DBMS_OUTPUT.PUT_LINE(‘La ville du client ‘|| code ||’:‘|| V_ville);


END ;
/ 22
Structures conditionnelles
• Syntaxe :
IF condition_plsql
Then commandes
[Else commandes ]
[ELSIF condition_plsql
Then commandes
[Else commandes ] ]
END IF;
• La condition peut utiliser les variables définies ainsi que tous les opérateurs
présents dans SQL : =, <, >, <=, >=, <>, IS NULL, IS NOT NULL
• Else est utilisé si les instructions qui suivent ne possèdent pas de
conditions.
• ELSIF est utilisé si les instructions qui suivent possèdent des conditions.
23
Structures conditionnelles
DECLARE
vjob char(10);
vnom emp.ename%type:='Miller';
message char(30);
BEGIN
Select job into vjob from emp where ename=vnom;
If vjob is NULL
then message:= vnom || 'pas de travail';
elsif vjob='Vendeur‘ then
update emp set comm=1000 where ename=vnom;
message:= vnom || 'a 1000 Frs de commission';
else
update emp set comm=0 where ename=vnom;
message:= vnom || 'pas de commission ';
end if;
insert into resultat values (NULL,NULL,message);
commit;
END ;
/
24
Structure conditionnelle Selon
CASE expression
WHEN valeur_1 THEN traitement_1
WHEN valeur_2 THEN traitement_2 ...
WHEN valeur_n THEN traitement_n
ELSE traitement
END CASE
OU BIEN
CASE
WHEN condition_1 THEN traitement_1
WHEN condition_2 THEN traitement_2 ...
WHEN condition_n THEN traitement_n
ELSE traitement
END CASE
25
Structure conditionnelle Selon
CASE
WHEN n_salary < 2000 THEN v_msg := 'Low';
WHEN n_salary >= 2000 and n_salary <=3000 THEN v_msg := 'Fair';
WHEN n_salary >= 3000 THEN v_msg := 'High';
END CASE;
----------------------------------------

CASE Epreuve
WHEN ‘DS’ THEN coef := 1,5;
WHEN ‘Examen’ THEN coef := 3;
WHEN ‘TP’ THEN coef := 2;
END CASE;
26
Structures itératives – L’instruction LOOP
• Syntaxe :
[<<Label>>] LOOP
...
instructions
...
END LOOP [<<Label>>];

• Les commandes EXIT, EXIT WHEN condition et GOTO permettent de


sortir de la Boucle.

27
Structures itératives – L’instruction LOOP
DECLARE
nombre number;
BEGIN
nombre:=0;
LOOP
nombre:=nombre+1;
if nombre > 10
then exit;
end if;
END LOOP ;
END ;
/
28
Structures itératives – L’instruction FOR…LOOP
• Syntaxe :
[<<Label>>]
FOR compteur IN [REVERSE] var_debut .. var_fin LOOP
...
instructions
...
END LOOP [<<Label>>];

• Les commandes EXIT, EXIT WHEN condition et GOTO permettent de


sortir de la Boucle.

29
Structures itératives – L’instruction WHILE…LOOP
• Syntaxe :
WHILE condition_plsql LOOP
...
instructions
...
END LOOP ;

• Les commandes EXIT, EXIT WHEN condition et GOTO permettent de


sortir de la Boucle.

30
Structures itératives – L’instruction WHILE…LOOP
DECLARE
salaire emp.sal%type;
manager emp.mgr%type;
nom emp.ename%type;
num_debut constant number(4):=7902;
BEGIN
select sal, mgr, ename into salaire, manager, nom
from emp where empno=num_debut;

WHILE salaire < 4000 LOOP


select sal, mgr, ename into salaire, manager, nom
from emp where empno=manager;
END LOOP ;
insert into resultat values (NULL,Salaire,Nom);
commit;
END ;
/
31

Vous aimerez peut-être aussi