SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Université Constantine 2
Raida ElMansouri
Faculté des NTIC
Raida.elmansouri@univ-constantine2.dz
Bases de données multimedia
Semestre 1
Le langage PL/ SQL
Université Constantine 2
Comparaison avec SQL
• Le PL de PL/SQL signifie Procedural Language.
• Il s’agit d’une extension procédurale du SQL permettant d’effectuer
des traitements complexes sur une base de données.
• Un script écrit en PL/SQL se termine obligatoirement par un /, sinon
SQL+ ne l’interprète pas.
• S’il contient des erreurs de compilation, il est possible d’afficher les
messages d’erreur avec la commande SQL+ : SHOW ERRORS.
2
Université Constantine 2
Blocs
Un programme PL/SQL ou bloc simple PL/SQL est composé de trois
sections.
•Une section de déclaration de variables optionnelle.
•Une section exécutable obligatoire qui doit commencer par
Begin et se terminer par END
•Une section Exception optionnelle pour la gestion des erreurs.
[ DECLARE] -
déclaration de variables, constantes, curseurs,…
BEGIN
instructions à executer
[ EXCEPTION ]
- Traitements à effectuer lors d'erreurs
END ;
3
Université Constantine 2
Affichage
Pour afficher le contenu d’une variable, on utilise les procédures
DBMS OUTPUT.PUT() et DBMS OUTPUT.PUT LINE().
Par défaut, les fonctions d’affichage sont désactivées. On les
active avec la commande SET SERVEROUTPUT ON.
Les Variables
Une variable se déclare de la sorte :
nom type [:= initialisation ] ; L’initiation est optionnelle
SET SERVEROUTPUT ON
DECLARE
c varchar2 (15) := ’ free Palestine’ ;
BEGIN
DBMS_OUTPUT.PUT_LINE ( c ) ;
END;
/
4
Université Constantine 2
Types de Variables
• Variables locales:
• De type simple: type de base ou booléen
• Faisant référence à la métabase
• De type composé: Tableau, Record
• Variables Extérieures:
• Variables d’un langage hote (ex: C) (préfixés par :)
• Paramètres (ex: SQL interactif par &)
• Champs d’écrans (Forms)
5
Université Constantine 2
Variables de type Simple
Declare
nom char(15);
salaire number(7,2);
embauche DATE ;
réponse boolean;
Déclarations multiples interdites :
i, j integer;
6
Université Constantine 2
Variables
• Identificateurs Oracle : 30 caractères au plus
• Commence par une lettre
• Peut contenir lettres, chiffres, _, $ et #
• Pas sensible à la casse
•Si une variable porte le même nom qu’une colonne d’une table,
c’est la colonne qui l’emporte.
Pour éviter ça, le plus simple est de ne pas donner de nom de
colonne à une variable !
7
Université Constantine 2
Variables sur la métabase
• Reprend
• Soit le même type qu’une colonne dans une table
nom_var1 table.colonne%TYPE
• Soit la même structure qu’une ligne dans une table
nom_var2 table%ROWTYPE
• Soit le même type qu’une variable précédemment définie
nom_vars3 nom_var1%TYPE
• Exemples:
nom F.Fnom%TYPE;
enreg F%ROWTYPE;
commi number(7,2);
Salaire commi%TYPE;
8
Université Constantine 2
Affectation
Il ya plusieurs façons d’assigner une valeur à une variable :
• Par la directive INTO d’une requête SELECT ne renvoyant
qu’une seule ligne de résultat.
•Par le symbole :=
Exemples :
• n char(20) := ’Mouad’;
•select nomF INTO nom from F where id_f = ‘F1’;
9
Université Constantine 2
Modification de données
• Les requêtes SQL (insert, update, delete,…) peuvent
utiliser les variables PL/SQL
• Les commit et rollback doivent être explicites ; aucun
n’est effectué automatiquement à la sortie d’un bloc
10
Université Constantine 2
Modification de données
DECLARE
v_F F%ROWTYPE
v_nom F.Fnom%TYPE;
BEGIN
v_nom := ‘Omar';
insert into F (id_f, Fnom) values(‘F50’ ; v_nom);
v_F.id_F := ‘F51’;
v_F.nomF := 'Dounia';
insert into F (d_f, nomF) values(v_F.id_f, v_F.nomF);
commit;
END;
11
Université Constantine 2
Traitements conditionnels
• Le IF et le CASE fonctionnent de la même façon que dans les autres langages impératifs :
IF /∗ c o n d i t i o n 1 ∗/ THEN
/∗ i n s t r u c t i o n s 1 ∗/
ELSE
/∗ i n s t r u c t i o n s 2 ∗/
END IF ;
IF /∗ c o n d i t i o n 1 ∗/ THEN
/∗ i n s t r u c t i o n s 1 ∗/
ELSIF /∗ c o n d i t i o n 2 ∗/
/∗ i n s t r u c t i o n s 2 ∗/
ELSE
/∗ i n s t r u c t i o n s 3 ∗/
CASE /∗ v a r i a b l e ∗/
WHEN /∗ v a l e u r 1 ∗/ THEN
/∗ i n s t r u c t i o n s 1 ∗/
WHEN /∗ v a l e u r 2 ∗/ THEN
/∗ i n s t r u c t i o n s 2 ∗/
. . .
WHEN /∗ v a l e u r n ∗/ THEN
/∗ i n s t r u c t i o n s n ∗/
ELSE
/∗ i n s t r u c t i o n s par d´e f a u t ∗/
END CASE;
12
Université Constantine 2
Traitements répétitifs
LOOP ... END LOOP ; permet d’implémenter les boucles
LOOP
/ i n s t r u c t i o n s /
END LOOP ;
L’instruction EXIT WHEN permet de quitter une boucle.
LOOP
/ i n s t r u c t i o n s /
EXIT WHEN / c o n d i t i o n / ;
END LOOP ;
La boucle FOR existe aussi en PL/SQL, ainsi que la boucle WHILE :
FOR / v a r i a b l e / IN / i n f / . . /
sup / LOOP
/ i n s t r u c t i o n s /
END LOOP ;
WHILE / c o n d i t i o n / LOOP
/ i n s t r u c t i o n s /
END LOOP ;
13
Université Constantine 2
Tableaux
• Création D’un tableau
Les types tableau doivent être définis explicitement par une déclaration de la forme:
TYPE / type / IS VARRAY ( / t a i l l e / ) OF / typeElements / ;
• type est le nom du type tableau crée par cette instruction
• taille est le nombre maximal d’eléments qu’il est possible de placer dans le
tableau.
• typeElements est le type des éléments qui vont être stockés dans le tableau, il
peut s’agir de n’importe quel type. Par exemple:
TYPE numberTab IS VARRAY (10) OF NUMBER;
14
Université Constantine 2
Tableaux
• Déclaration d’un tableau
le type d’un tableau peut être utilisé au même titre que NUMBER ou
VARCHAR2. Par exemple, un tableau appelé t de type numberTab,
DECLARE
TYPE numberTab IS VARRAY (10) OF
NUMBER;
t numberTab ;
BEGIN
/ i n s t r u c t i o n s /
END;
/
15
Université Constantine 2
Allocation d’un tableau
DECLARE
TYPE numberTab IS VARRAY (10) OF NUMBER;
t numberTab ;
BEGIN
t := numberTab ( ) ;
/∗ u t i l i s a t i o n du t a b l e a u ∗/
END;
/
Le tableau retourne par le constructeur est vide. Il faut réserver de l’espace pour stocker
les éléments qu’il va contenir. On utilise la méthode EXTEND().
Exemple:
DECLARE
TYPE numberTab IS VARRAY (10) OF NUMBER;
t numberTab ;
BEGIN
t := numberTab ( ) ;
t . EXTEND ( 4 ) ;
/∗ u t i l i s a t i o n du t a b l e a u ∗/
END;
/
16
Université Constantine 2
Utilisation d’un tableau
• On accède, en lecture et en écriture, au i-eme élément d’un tableau nommé T avec
l’instruction T(i). Les éléments sont indices à partir de 1.
Exemple: Une permutation circulaire vers la droite des éléments du tableau t.
DECLARE
TYPE numberTab IS VARRAY (10) OF NUMBER;
t numberTab ;
i number;
k number;
BEGIN
t := numberTab ( ) ;
t . EXTEND ( 1 0 ) ;
FOR i IN 1 . . 1 0 LOOP
t( i) := i ;
END LOOP ;
k := t ( 1 0 ) ;
FOR i in REVERSE 2 . . 1 0 LOOP
t( i) := t( i − 1 ) ;
END LOOP ;
t (1) := k ;
FOR i IN 1 . . 1 0 LOOP
DBMS_OUTPUT . PUT_LINE ( t( i ) ) ;
END LOOP ;
END;
/
17
Université Constantine 2
Structures
Un structure est un type regroupant plusieurs types. Une variable de type structuré
contient plusieurs variables, ces variables s’appellent aussi des champs.
On définit un type structure de la sorte :
TYPE / nomType / IS RECORD
(
/ l i s t e des champs /
) ;
TYPE point IS RECORD
(
abscisse NUMBER,
ordonnee NUMBER
) ;
Exemple:
Pour déclarer une variable p de type point.
p point ;
18
Université Constantine 2
Structures
• Pour accéder a un champ d’une variable de type structuré, en lecture
ou en écriture, on utilise la notation pointée. Par exemple:
DECLARE
TYPE point IS RECORD
(
abscisse NUMBER,
ordonnee NUMBER
) ;
p point ;
BEGIN
p . abscisse := 1 ;
p . ordonnee := 3 ;
DBMS_OUTPUT . PUT_LINE ( ’p . abscisse = ’ | | p . abscisse | |
’ and p . ordonnee =’ | | p . ordonnee ) ;
END;
/
19
Université Constantine 2
Procédures
CREATE OR REPLACE PROCEDURE / nom / ( / parametres / ) IS
/ d e c l a r a t i o n des v a r i a b l e s l o c a l e s /
BEGIN
/ i n s t r u c t i o n s /
END;
On définit une procédure de la sorte:
Par exemple, la procédure suivante affiche un compte à rebours.
CREATE OR REPLACE PROCEDURE compteARebours ( n NUMBER) IS
BEGIN
IF n >= 0 THEN
DBMS_OUTPUT. PUT_LINE (n) ;
compteARebours (n -1) ;
END IF ;
END;
/
Pour invoquer une procdure, on utlise Call:
Call compteARebours(10);
20
Université Constantine 2
Fonctions
CREATE OR REPLACE FUNCTION / nom / ( / parametres / ) RETURN / type / IS
/ d e c l a r a t i o n des v a r i a b l e s l o c a l e s /
BEGIN
/ i n s t r u c t i o n s /
END;
• On crée une fonction de la façon suivante :
• L’instruction RETURN sert à retourner une valeur. Par exemple:
CREATE OR REPLACE FUNCTION module ( a NUMBER, b NUMBER) RETURN NUMBER IS
BEGIN
IF a < b THEN
RETURN a ;
ELSE
RETURN module( a−b , b );
END IF ;
END;
/
21
Pour invoquer une fonction, on passe par une pseudo-table nommée DUAL de la façon
suivante : SELECT module(21 , 12) FROM DUAL ;
Université Constantine 2
Recherche de données avec un curseur
• Les instructions de type SELECT ... INTO ... manquent de souplesse, elles ne
fonctionnent que sur des requêtes retournant une et une seule valeur.
• Définition
• Un curseur est un mécanisme permettant de rechercher un nombre
arbitraire de lignes avec une instruction SELECT.
• Déclaration
Un curseur se déclare dans une section DECLARE :
CURSOR / nomcurseur / IS / r e q uˆe t e / ;
Par exemple, si on veut récupérer tous les produits de la table Prod, on déclare le
curseur suivant:
CURSOR Prod_cur IS
SELECT FROM Prod ;
22
Université Constantine 2
Ouverture
On ouvre un curseur dans une section BEGIN :
OPEN / nomcurseur / ;
Par exemple:
DECLARE
CURSOR prod_cur IS
SELECT FROM Prod ;
BEGIN
OPEN prod_cur ;
/ U t i l i s a t i o n du curseur /
END;
Lecture d’une ligne
Une fois ouvert, le curseur contient toutes les lignes du résultat de la requête On les
récupère une par une en utilisant le mot-clé FETCH :
FETCH / nom curseur / INTO / l i s t e v a r i a b l e s / ;
23
Université Constantine 2
Lecture d’une ligne
• La liste de variables peut être remplacée par une structure de type nom
curseur%ROWTYPE. Si la lecture de la ligne échoue, parce qu’il n’y a plus de
lignes à lire, l’attribut %NOTFOUND prend la valeur vrai.
DECLARE
CURSOR prod_cur IS
SELECT FROM prod ;
ligne prod_cur%rowtype;
BEGIN
OPEN prod_cur ;
LOOP
FETCH prod_cur INTO ligne ;
EXIT WHEN prod_cur%NOTFOUND ;
DBMS_OUTPUT . PUT_LINE ( ligne.pnom) ;
END LOOP ;
/ . . . /
END;
24
Université Constantine 2
Fermeture
Après utilisation, il convient de fermer le curseur.
CLOSE / nomcurseur / ;
DECLARE
CURSOR prod_cur IS
SELECT FROM prod ;
ligne prod_cur%rowtype;
BEGIN
OPEN prod_cur ;
LOOP
FETCH prod_cur INTO ligne ;
EXIT WHEN prod_cur%NOTFOUND ;
DBMS_OUTPUT. PUT_LINE ( ligne.pnom) ;
END LOOP ;
CLOSE Prod_cur ;
END;
/
25
Université Constantine 2
Le programme ci-dessus peut aussi s'écrire
• DECLARE
CURSOR prod_cur IS
SELECT FROM prod ;
ligne prod_cur%rowtype ;
BEGIN
OPEN prod_cur ;
FETCH prod_cur INTO ligne ;
WHILE prod_cur%FOUND LOOP
DBMS_OUTPUT . PUT_LINE ( ligne . pnom) ;
FETCH prod_cur INTO ligne ;
END LOOP ;
CLOSE prod_cur ;
END;
26
Université Constantine 2
Boucle FOR
• Il existe une boucle FOR se chargeant de l’ouverture, de la lecture des
lignes du curseur et de sa fermeture,
FOR ligne IN emp_cur LOOP
/ Traitement /
END LOOP ;
• Par exemple:
DECLARE
CURSOR prod_cur IS
SELECT FROM prod ;
ligne prod_cur%rowtype ;
BEGIN
FOR ligne IN prod_cur LOOP
DBMS_OUTPUT.PUT_LINE ( ligne.pnom ) ;
END LOOP ;
END;
/
27
Université Constantine 2
Curseurs paramétrés
• Définition
Un curseur paramétré est un curseur dont la requête contient des variables
dont les valeurs ne seront fixées qu’à l’ouverture.
• Déclaration
On précise la liste des noms et des type des paramètres entre parenthèses
après le nom du curseur :
CURSOR / nom / ( / l i s t e des paramètres / ) IS / requête /
Par exemple, créerons une requête qui, pour un produit donné, nous donne
son nom et sa couleur :
CURSOR prod_cur ( id prod.id_p%type) IS
SELECT pnom, couleur
FROM prod
WHERE id_p = id;
28
Université Constantine 2
Ouvèrture
• On ouvre un curseur paramétré en passant en paramètre les valeurs des variables
OPEN / nom / ( / l i s t e des paramètres / )
OPEN prod_cur( ‘p1’ ) ;
Lecture d’une ligne, fermeture
• la lecture d’une ligne suit les mêmes règles qu’avec un curseur non paramétré.
• La boucle FOR se charge de l’ouverture, les paramètres sont placés dans l’entête de la
boucle,
FOR / v a r i a b l e / IN / nom / ( / l i s t e param`etres / ) LOOP
/ i n s t r u c t i o n s /
END LOOP ;
Par exemple: FOR / v a r i a b l e / IN / nom / ( / l i s t e parametres / )
LOOP
/ i n s t r u c t i o n s /
END LOOP ;
29
Université Constantine 2
Exemple
-Nombre de livraisons faites pour un produit donné :
create or replace procedure compteurDeLivraisons(ID Prod.ID_P%type) is
CURSOR prod_cur2(id prod.id_p%type) IS
SELECT * FROM puf
where id_p=id;
ligne prod_cur2%rowtype ;
co number;
BEGIN
co:=0;
FOR ligne IN prod_cur2(id) LOOP
co:=co+1;
END LOOP ;
DBMS_OUTPUT.PUT_LINE (co) ;
END;
/
call compteurDeLivraisons('P1');
30
Université Constantine 2
Exceptions
• Une exception est une “erreur type”. Elle porte un nom
EXCEPTION
WHEN E1 THEN
/ t r a i t e m e n t /
WHEN E2 THEN
/ t r a i t e m e n t /
WHEN E3 THEN
/ t r a i t e m e n t /
WHEN OTHERS THEN
/ t r a i t e m e n t /
END;
31
Université Constantine 2
Exceptions Prédéfinies
• DUP_VAL_ON_INDEX
• Lorsqu’une instruction SQL tente de créer une valeur dupliquée dans une
colonne sur laquelle un index unique a été défini
• INVALID_NUMBER
• Lorsqu’une instruction SQL spécifie un nombre invalide
• NO_DATA_FOUND
• Lorsqu’une instruction Select ne retourne aucune ligne
• TOO_MANY_ROWS
• Une instruction Select ne peut pas renvoyer plus d’une ligne sans provoquer
l’exception TOO_MANY_ROWS
• VALUE_ERROR
• Provoquée dans des situations d’erreur résultant de valeurs tronquées ou
converties
32
Université Constantine 2
Exemple
DECLARE
num Char(4);
nom VARCHAR2(30) := ’ Rose ’ ;
BEGIN
SELECT id_p INTO num
FROM PROD WHERE pnom = nom ;
DBMS_OUTPUT . PUT_LINE ( ’L’ ’ a rticle ’ | |nom | | ’ a pour id’ | | num ) ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT . PUT_LINE ( ’Aucun arti cle ne porte le nom ’| | nom ) ;
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT . PUT_LINE ( ’ Plusieurs articles portent l e nom ’ | | nom ) ;
WHEN OTHERS THEN
DBMS_OUTPUT . PUT_LINE ( ’ I l y a un problème . . . ’ ) ;
END;
/
33

Contenu connexe

Similaire à BDA-PL-SQL.pdf11111111111111111111111111

CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSiratiSoufiane
 
Le langage plsql
Le langage plsqlLe langage plsql
Le langage plsqlkati_f87
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptxMaNl13
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: TableauInforMatica34
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage javakrymo
 
Plsql
PlsqlPlsql
PlsqlAz Za
 
Cours c#
Cours c#Cours c#
Cours c#zan
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfFadouaBouafifSamoud
 
PLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdfPLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdfRihabBENLAMINE
 
LES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithmeLES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithmeaymaneelfellah
 
Excel ppt.ppt
Excel ppt.pptExcel ppt.ppt
Excel ppt.pptBadarSaf
 
1444475541443.pptx
1444475541443.pptx1444475541443.pptx
1444475541443.pptxtirike6016
 

Similaire à BDA-PL-SQL.pdf11111111111111111111111111 (20)

CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
Chapitre05 : Les tableaux
Chapitre05 : Les tableauxChapitre05 : Les tableaux
Chapitre05 : Les tableaux
 
Plsql
PlsqlPlsql
Plsql
 
Le langage plsql
Le langage plsqlLe langage plsql
Le langage plsql
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptx
 
Chapitre3 tableauxcpp
Chapitre3 tableauxcppChapitre3 tableauxcpp
Chapitre3 tableauxcpp
 
cours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhouminecours Plsql _ abdelkhalek benhoumine
cours Plsql _ abdelkhalek benhoumine
 
Cours Algorithme: Tableau
Cours Algorithme: TableauCours Algorithme: Tableau
Cours Algorithme: Tableau
 
Language-C.ppt
Language-C.pptLanguage-C.ppt
Language-C.ppt
 
Les bases du langage java
Les bases du langage javaLes bases du langage java
Les bases du langage java
 
Plsql
PlsqlPlsql
Plsql
 
Cours c#
Cours c#Cours c#
Cours c#
 
Tp1 matlab
Tp1 matlab Tp1 matlab
Tp1 matlab
 
TP5_2020.pdf
TP5_2020.pdfTP5_2020.pdf
TP5_2020.pdf
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
PLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdfPLSQL-Complements-4p.pdf
PLSQL-Complements-4p.pdf
 
langage C++
langage C++langage C++
langage C++
 
LES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithmeLES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithme
 
Excel ppt.ppt
Excel ppt.pptExcel ppt.ppt
Excel ppt.ppt
 
1444475541443.pptx
1444475541443.pptx1444475541443.pptx
1444475541443.pptx
 

Dernier

SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSKennel
 
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptCHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptbentaha1011
 
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfActions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfalainfahed961
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).FatimaEzzahra753100
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...maach1
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 

Dernier (8)

SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
 
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.pptCHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
CHAPITRE 2 VARIABLE ALEATOIRE probabilité.ppt
 
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdfActions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
Actions du vent sur les bâtiments selon lEurocode 1 – Partie 1-4.pdf
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).
 
CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
Note agro-climatique n°2 - 17 Avril 2024
Note agro-climatique n°2 - 17 Avril 2024Note agro-climatique n°2 - 17 Avril 2024
Note agro-climatique n°2 - 17 Avril 2024
 

BDA-PL-SQL.pdf11111111111111111111111111

  • 1. Université Constantine 2 Raida ElMansouri Faculté des NTIC Raida.elmansouri@univ-constantine2.dz Bases de données multimedia Semestre 1 Le langage PL/ SQL
  • 2. Université Constantine 2 Comparaison avec SQL • Le PL de PL/SQL signifie Procedural Language. • Il s’agit d’une extension procédurale du SQL permettant d’effectuer des traitements complexes sur une base de données. • Un script écrit en PL/SQL se termine obligatoirement par un /, sinon SQL+ ne l’interprète pas. • S’il contient des erreurs de compilation, il est possible d’afficher les messages d’erreur avec la commande SQL+ : SHOW ERRORS. 2
  • 3. Université Constantine 2 Blocs Un programme PL/SQL ou bloc simple PL/SQL est composé de trois sections. •Une section de déclaration de variables optionnelle. •Une section exécutable obligatoire qui doit commencer par Begin et se terminer par END •Une section Exception optionnelle pour la gestion des erreurs. [ DECLARE] - déclaration de variables, constantes, curseurs,… BEGIN instructions à executer [ EXCEPTION ] - Traitements à effectuer lors d'erreurs END ; 3
  • 4. Université Constantine 2 Affichage Pour afficher le contenu d’une variable, on utilise les procédures DBMS OUTPUT.PUT() et DBMS OUTPUT.PUT LINE(). Par défaut, les fonctions d’affichage sont désactivées. On les active avec la commande SET SERVEROUTPUT ON. Les Variables Une variable se déclare de la sorte : nom type [:= initialisation ] ; L’initiation est optionnelle SET SERVEROUTPUT ON DECLARE c varchar2 (15) := ’ free Palestine’ ; BEGIN DBMS_OUTPUT.PUT_LINE ( c ) ; END; / 4
  • 5. Université Constantine 2 Types de Variables • Variables locales: • De type simple: type de base ou booléen • Faisant référence à la métabase • De type composé: Tableau, Record • Variables Extérieures: • Variables d’un langage hote (ex: C) (préfixés par :) • Paramètres (ex: SQL interactif par &) • Champs d’écrans (Forms) 5
  • 6. Université Constantine 2 Variables de type Simple Declare nom char(15); salaire number(7,2); embauche DATE ; réponse boolean; Déclarations multiples interdites : i, j integer; 6
  • 7. Université Constantine 2 Variables • Identificateurs Oracle : 30 caractères au plus • Commence par une lettre • Peut contenir lettres, chiffres, _, $ et # • Pas sensible à la casse •Si une variable porte le même nom qu’une colonne d’une table, c’est la colonne qui l’emporte. Pour éviter ça, le plus simple est de ne pas donner de nom de colonne à une variable ! 7
  • 8. Université Constantine 2 Variables sur la métabase • Reprend • Soit le même type qu’une colonne dans une table nom_var1 table.colonne%TYPE • Soit la même structure qu’une ligne dans une table nom_var2 table%ROWTYPE • Soit le même type qu’une variable précédemment définie nom_vars3 nom_var1%TYPE • Exemples: nom F.Fnom%TYPE; enreg F%ROWTYPE; commi number(7,2); Salaire commi%TYPE; 8
  • 9. Université Constantine 2 Affectation Il ya plusieurs façons d’assigner une valeur à une variable : • Par la directive INTO d’une requête SELECT ne renvoyant qu’une seule ligne de résultat. •Par le symbole := Exemples : • n char(20) := ’Mouad’; •select nomF INTO nom from F where id_f = ‘F1’; 9
  • 10. Université Constantine 2 Modification de données • Les requêtes SQL (insert, update, delete,…) peuvent utiliser les variables PL/SQL • Les commit et rollback doivent être explicites ; aucun n’est effectué automatiquement à la sortie d’un bloc 10
  • 11. Université Constantine 2 Modification de données DECLARE v_F F%ROWTYPE v_nom F.Fnom%TYPE; BEGIN v_nom := ‘Omar'; insert into F (id_f, Fnom) values(‘F50’ ; v_nom); v_F.id_F := ‘F51’; v_F.nomF := 'Dounia'; insert into F (d_f, nomF) values(v_F.id_f, v_F.nomF); commit; END; 11
  • 12. Université Constantine 2 Traitements conditionnels • Le IF et le CASE fonctionnent de la même façon que dans les autres langages impératifs : IF /∗ c o n d i t i o n 1 ∗/ THEN /∗ i n s t r u c t i o n s 1 ∗/ ELSE /∗ i n s t r u c t i o n s 2 ∗/ END IF ; IF /∗ c o n d i t i o n 1 ∗/ THEN /∗ i n s t r u c t i o n s 1 ∗/ ELSIF /∗ c o n d i t i o n 2 ∗/ /∗ i n s t r u c t i o n s 2 ∗/ ELSE /∗ i n s t r u c t i o n s 3 ∗/ CASE /∗ v a r i a b l e ∗/ WHEN /∗ v a l e u r 1 ∗/ THEN /∗ i n s t r u c t i o n s 1 ∗/ WHEN /∗ v a l e u r 2 ∗/ THEN /∗ i n s t r u c t i o n s 2 ∗/ . . . WHEN /∗ v a l e u r n ∗/ THEN /∗ i n s t r u c t i o n s n ∗/ ELSE /∗ i n s t r u c t i o n s par d´e f a u t ∗/ END CASE; 12
  • 13. Université Constantine 2 Traitements répétitifs LOOP ... END LOOP ; permet d’implémenter les boucles LOOP / i n s t r u c t i o n s / END LOOP ; L’instruction EXIT WHEN permet de quitter une boucle. LOOP / i n s t r u c t i o n s / EXIT WHEN / c o n d i t i o n / ; END LOOP ; La boucle FOR existe aussi en PL/SQL, ainsi que la boucle WHILE : FOR / v a r i a b l e / IN / i n f / . . / sup / LOOP / i n s t r u c t i o n s / END LOOP ; WHILE / c o n d i t i o n / LOOP / i n s t r u c t i o n s / END LOOP ; 13
  • 14. Université Constantine 2 Tableaux • Création D’un tableau Les types tableau doivent être définis explicitement par une déclaration de la forme: TYPE / type / IS VARRAY ( / t a i l l e / ) OF / typeElements / ; • type est le nom du type tableau crée par cette instruction • taille est le nombre maximal d’eléments qu’il est possible de placer dans le tableau. • typeElements est le type des éléments qui vont être stockés dans le tableau, il peut s’agir de n’importe quel type. Par exemple: TYPE numberTab IS VARRAY (10) OF NUMBER; 14
  • 15. Université Constantine 2 Tableaux • Déclaration d’un tableau le type d’un tableau peut être utilisé au même titre que NUMBER ou VARCHAR2. Par exemple, un tableau appelé t de type numberTab, DECLARE TYPE numberTab IS VARRAY (10) OF NUMBER; t numberTab ; BEGIN / i n s t r u c t i o n s / END; / 15
  • 16. Université Constantine 2 Allocation d’un tableau DECLARE TYPE numberTab IS VARRAY (10) OF NUMBER; t numberTab ; BEGIN t := numberTab ( ) ; /∗ u t i l i s a t i o n du t a b l e a u ∗/ END; / Le tableau retourne par le constructeur est vide. Il faut réserver de l’espace pour stocker les éléments qu’il va contenir. On utilise la méthode EXTEND(). Exemple: DECLARE TYPE numberTab IS VARRAY (10) OF NUMBER; t numberTab ; BEGIN t := numberTab ( ) ; t . EXTEND ( 4 ) ; /∗ u t i l i s a t i o n du t a b l e a u ∗/ END; / 16
  • 17. Université Constantine 2 Utilisation d’un tableau • On accède, en lecture et en écriture, au i-eme élément d’un tableau nommé T avec l’instruction T(i). Les éléments sont indices à partir de 1. Exemple: Une permutation circulaire vers la droite des éléments du tableau t. DECLARE TYPE numberTab IS VARRAY (10) OF NUMBER; t numberTab ; i number; k number; BEGIN t := numberTab ( ) ; t . EXTEND ( 1 0 ) ; FOR i IN 1 . . 1 0 LOOP t( i) := i ; END LOOP ; k := t ( 1 0 ) ; FOR i in REVERSE 2 . . 1 0 LOOP t( i) := t( i − 1 ) ; END LOOP ; t (1) := k ; FOR i IN 1 . . 1 0 LOOP DBMS_OUTPUT . PUT_LINE ( t( i ) ) ; END LOOP ; END; / 17
  • 18. Université Constantine 2 Structures Un structure est un type regroupant plusieurs types. Une variable de type structuré contient plusieurs variables, ces variables s’appellent aussi des champs. On définit un type structure de la sorte : TYPE / nomType / IS RECORD ( / l i s t e des champs / ) ; TYPE point IS RECORD ( abscisse NUMBER, ordonnee NUMBER ) ; Exemple: Pour déclarer une variable p de type point. p point ; 18
  • 19. Université Constantine 2 Structures • Pour accéder a un champ d’une variable de type structuré, en lecture ou en écriture, on utilise la notation pointée. Par exemple: DECLARE TYPE point IS RECORD ( abscisse NUMBER, ordonnee NUMBER ) ; p point ; BEGIN p . abscisse := 1 ; p . ordonnee := 3 ; DBMS_OUTPUT . PUT_LINE ( ’p . abscisse = ’ | | p . abscisse | | ’ and p . ordonnee =’ | | p . ordonnee ) ; END; / 19
  • 20. Université Constantine 2 Procédures CREATE OR REPLACE PROCEDURE / nom / ( / parametres / ) IS / d e c l a r a t i o n des v a r i a b l e s l o c a l e s / BEGIN / i n s t r u c t i o n s / END; On définit une procédure de la sorte: Par exemple, la procédure suivante affiche un compte à rebours. CREATE OR REPLACE PROCEDURE compteARebours ( n NUMBER) IS BEGIN IF n >= 0 THEN DBMS_OUTPUT. PUT_LINE (n) ; compteARebours (n -1) ; END IF ; END; / Pour invoquer une procdure, on utlise Call: Call compteARebours(10); 20
  • 21. Université Constantine 2 Fonctions CREATE OR REPLACE FUNCTION / nom / ( / parametres / ) RETURN / type / IS / d e c l a r a t i o n des v a r i a b l e s l o c a l e s / BEGIN / i n s t r u c t i o n s / END; • On crée une fonction de la façon suivante : • L’instruction RETURN sert à retourner une valeur. Par exemple: CREATE OR REPLACE FUNCTION module ( a NUMBER, b NUMBER) RETURN NUMBER IS BEGIN IF a < b THEN RETURN a ; ELSE RETURN module( a−b , b ); END IF ; END; / 21 Pour invoquer une fonction, on passe par une pseudo-table nommée DUAL de la façon suivante : SELECT module(21 , 12) FROM DUAL ;
  • 22. Université Constantine 2 Recherche de données avec un curseur • Les instructions de type SELECT ... INTO ... manquent de souplesse, elles ne fonctionnent que sur des requêtes retournant une et une seule valeur. • Définition • Un curseur est un mécanisme permettant de rechercher un nombre arbitraire de lignes avec une instruction SELECT. • Déclaration Un curseur se déclare dans une section DECLARE : CURSOR / nomcurseur / IS / r e q uˆe t e / ; Par exemple, si on veut récupérer tous les produits de la table Prod, on déclare le curseur suivant: CURSOR Prod_cur IS SELECT FROM Prod ; 22
  • 23. Université Constantine 2 Ouverture On ouvre un curseur dans une section BEGIN : OPEN / nomcurseur / ; Par exemple: DECLARE CURSOR prod_cur IS SELECT FROM Prod ; BEGIN OPEN prod_cur ; / U t i l i s a t i o n du curseur / END; Lecture d’une ligne Une fois ouvert, le curseur contient toutes les lignes du résultat de la requête On les récupère une par une en utilisant le mot-clé FETCH : FETCH / nom curseur / INTO / l i s t e v a r i a b l e s / ; 23
  • 24. Université Constantine 2 Lecture d’une ligne • La liste de variables peut être remplacée par une structure de type nom curseur%ROWTYPE. Si la lecture de la ligne échoue, parce qu’il n’y a plus de lignes à lire, l’attribut %NOTFOUND prend la valeur vrai. DECLARE CURSOR prod_cur IS SELECT FROM prod ; ligne prod_cur%rowtype; BEGIN OPEN prod_cur ; LOOP FETCH prod_cur INTO ligne ; EXIT WHEN prod_cur%NOTFOUND ; DBMS_OUTPUT . PUT_LINE ( ligne.pnom) ; END LOOP ; / . . . / END; 24
  • 25. Université Constantine 2 Fermeture Après utilisation, il convient de fermer le curseur. CLOSE / nomcurseur / ; DECLARE CURSOR prod_cur IS SELECT FROM prod ; ligne prod_cur%rowtype; BEGIN OPEN prod_cur ; LOOP FETCH prod_cur INTO ligne ; EXIT WHEN prod_cur%NOTFOUND ; DBMS_OUTPUT. PUT_LINE ( ligne.pnom) ; END LOOP ; CLOSE Prod_cur ; END; / 25
  • 26. Université Constantine 2 Le programme ci-dessus peut aussi s'écrire • DECLARE CURSOR prod_cur IS SELECT FROM prod ; ligne prod_cur%rowtype ; BEGIN OPEN prod_cur ; FETCH prod_cur INTO ligne ; WHILE prod_cur%FOUND LOOP DBMS_OUTPUT . PUT_LINE ( ligne . pnom) ; FETCH prod_cur INTO ligne ; END LOOP ; CLOSE prod_cur ; END; 26
  • 27. Université Constantine 2 Boucle FOR • Il existe une boucle FOR se chargeant de l’ouverture, de la lecture des lignes du curseur et de sa fermeture, FOR ligne IN emp_cur LOOP / Traitement / END LOOP ; • Par exemple: DECLARE CURSOR prod_cur IS SELECT FROM prod ; ligne prod_cur%rowtype ; BEGIN FOR ligne IN prod_cur LOOP DBMS_OUTPUT.PUT_LINE ( ligne.pnom ) ; END LOOP ; END; / 27
  • 28. Université Constantine 2 Curseurs paramétrés • Définition Un curseur paramétré est un curseur dont la requête contient des variables dont les valeurs ne seront fixées qu’à l’ouverture. • Déclaration On précise la liste des noms et des type des paramètres entre parenthèses après le nom du curseur : CURSOR / nom / ( / l i s t e des paramètres / ) IS / requête / Par exemple, créerons une requête qui, pour un produit donné, nous donne son nom et sa couleur : CURSOR prod_cur ( id prod.id_p%type) IS SELECT pnom, couleur FROM prod WHERE id_p = id; 28
  • 29. Université Constantine 2 Ouvèrture • On ouvre un curseur paramétré en passant en paramètre les valeurs des variables OPEN / nom / ( / l i s t e des paramètres / ) OPEN prod_cur( ‘p1’ ) ; Lecture d’une ligne, fermeture • la lecture d’une ligne suit les mêmes règles qu’avec un curseur non paramétré. • La boucle FOR se charge de l’ouverture, les paramètres sont placés dans l’entête de la boucle, FOR / v a r i a b l e / IN / nom / ( / l i s t e param`etres / ) LOOP / i n s t r u c t i o n s / END LOOP ; Par exemple: FOR / v a r i a b l e / IN / nom / ( / l i s t e parametres / ) LOOP / i n s t r u c t i o n s / END LOOP ; 29
  • 30. Université Constantine 2 Exemple -Nombre de livraisons faites pour un produit donné : create or replace procedure compteurDeLivraisons(ID Prod.ID_P%type) is CURSOR prod_cur2(id prod.id_p%type) IS SELECT * FROM puf where id_p=id; ligne prod_cur2%rowtype ; co number; BEGIN co:=0; FOR ligne IN prod_cur2(id) LOOP co:=co+1; END LOOP ; DBMS_OUTPUT.PUT_LINE (co) ; END; / call compteurDeLivraisons('P1'); 30
  • 31. Université Constantine 2 Exceptions • Une exception est une “erreur type”. Elle porte un nom EXCEPTION WHEN E1 THEN / t r a i t e m e n t / WHEN E2 THEN / t r a i t e m e n t / WHEN E3 THEN / t r a i t e m e n t / WHEN OTHERS THEN / t r a i t e m e n t / END; 31
  • 32. Université Constantine 2 Exceptions Prédéfinies • DUP_VAL_ON_INDEX • Lorsqu’une instruction SQL tente de créer une valeur dupliquée dans une colonne sur laquelle un index unique a été défini • INVALID_NUMBER • Lorsqu’une instruction SQL spécifie un nombre invalide • NO_DATA_FOUND • Lorsqu’une instruction Select ne retourne aucune ligne • TOO_MANY_ROWS • Une instruction Select ne peut pas renvoyer plus d’une ligne sans provoquer l’exception TOO_MANY_ROWS • VALUE_ERROR • Provoquée dans des situations d’erreur résultant de valeurs tronquées ou converties 32
  • 33. Université Constantine 2 Exemple DECLARE num Char(4); nom VARCHAR2(30) := ’ Rose ’ ; BEGIN SELECT id_p INTO num FROM PROD WHERE pnom = nom ; DBMS_OUTPUT . PUT_LINE ( ’L’ ’ a rticle ’ | |nom | | ’ a pour id’ | | num ) ; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT . PUT_LINE ( ’Aucun arti cle ne porte le nom ’| | nom ) ; WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT . PUT_LINE ( ’ Plusieurs articles portent l e nom ’ | | nom ) ; WHEN OTHERS THEN DBMS_OUTPUT . PUT_LINE ( ’ I l y a un problème . . . ’ ) ; END; / 33