0% ont trouvé ce document utile (0 vote)
109 vues58 pages

CH PLSQL Partie2

Ce document présente les curseurs PL/SQL. Il définit ce qu'est un curseur, les différentes étapes de son utilisation (déclaration, ouverture, traitement des lignes, fermeture) ainsi que les boucles pour les parcourir. Il aborde également la modification des données avec un curseur et la gestion des erreurs avec les exceptions.

Transféré par

adso pran
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)
109 vues58 pages

CH PLSQL Partie2

Ce document présente les curseurs PL/SQL. Il définit ce qu'est un curseur, les différentes étapes de son utilisation (déclaration, ouverture, traitement des lignes, fermeture) ainsi que les boucles pour les parcourir. Il aborde également la modification des données avec un curseur et la gestion des erreurs avec les exceptions.

Transféré par

adso pran
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

Royaume du Maroc

Université Hassan Premier


Faculté des Sciences et Techniques De Settat

Bases de données
Chapitre 6 :PL/SQL

Kaoutar ERRAKHA Année Universitaire : 2022_2023

[Link]@[Link]
PLAN

 Introduction
 Développement bloc simple

 Traitements Conditionnels et Traitements Répétitifs

 Curseurs

 Gestion des Erreurs (EXCEPTION)


 PROCEDURES FONCTIONS ET PACKAGES

Cours Base de donnèes 2


•3
Curseurs
 CURSEUR

 Qu’est ce qu’un Curseur ?

Une zone mémoire de taille fixe contenant le résultat d'une requête. Utilisée pour
interpréter et analyser les ordres SQL.
Le nombre de curseurs ouverts simultanément est défini par le paramètre
OPEN_CURSORS dans le PFILE de la base.

Cours Base de donnèes 4


 CURSEUR

Cours Base de donnèes 5


 CURSEUR

Cours Base de donnèes 6


 CURSEUR

 L'utilisation d'un curseur nécessite 4 étapes :

1. Déclaration du curseur : Section DECLARE


2. Ouverture du curseur : Section BEGIN
3. Traitement des lignes : Section BEGIN
4. Fermeture du curseur : Section BEGIN OU EXCEPTION

Cours Base de donnèes 7


 CURSEUR

 La déclaration d'un curseur

 La déclaration du curseur permet de stocker l'ordre Select dans le curseur.


Le curseur se définit dans la partie Declare d'un bloc PL/Sql.

Cursor nomcurseur IS Requete_SELECT ;

Cours Base de donnèes 8


 CURSEUR

 LES CURSEURS EXPLICITES

Cours Base de donnèes 9


 CURSEUR

 L'ouverture du curseur

 L’ouverture du curseur réalise :


1. l'allocation mémoire du curseur
2. l'analyse sémantique et syntaxique de l'ordre
3. le positionnement de verrous éventuels (si select for update...)
 C’est seulement à l’ouverture du curseur que la requête SQL s’éxecute.
 L'ouverture du curseur se fait dans la section Begin du Bloc.

OPEN nomcurseur ;

10

Cours Base de donnèes 10


 CURSEUR

 L'ouverture du curseur

Declare
Cursor DEPT10 is
select ename, sal from emp where deptno=10 order by
sal ;
Begin
...Open DEPT10;
.....
End ;
11

Cours Base de donnèes 11


 CURSEUR

 Traitement des lignes

Après l'exécution du Select


Les lignes ramenées sont traitées une par une,
La valeur de chaque colonne du Select doit être stockée dans une variable réceptrice
définie dans la partie Declare du bloc.
Le fetch ramène une seule ligne à la fois,
Pour traiter n lignes il faut une boucle.

FETCH nomcurseur INTO liste_variables ou Nom_enregistrement;

12

Cours Base de donnèes 12


 CURSEUR

13

Cours Base de donnèes 13


 CURSEUR

 Attributs d’un Curseur Explicite

Obtenir des informations sur le curseur en utilisant les attributs de curseur.

14

Cours Base de donnèes 14


 CURSEUR

 La fermeture du curseur

Après le traitement des lignes, l'étape de fermeture permet d'effectuer la libération de la


place mémoire.

CLOSE nomcurseur; Close dept10 ;

15

Cours Base de donnèes 15


 CURSEUR

 Boucle LOOP pour un curseur

16

Cours Base de donnèes 16


 CURSEUR

 Boucle FOR pour un curseur

17

Cours Base de donnèes 17


 CURSEUR

 MODIFICATION DE DONNEES

Les modifications de données s’effectuent normalement par les instructions SQL :


INSERT, UPDATE et DELETE
 PL/Sql permet la possibilité d’utiliser l’option CURRENT OF nom_curseur dans la
clause WHERE des instructions UPDATE et DELETE.
Cette option permet de modifier ou de supprimer la ligne distribuée par la commande
FETCH.
Pour utiliser cette option, il faut ajouter la clause FOR UPDATE à la fin de la
définition du curseur.
Cette clause FOR UPDATE [OF col1, col2,…] bloque toute la ligne ou seulement les
colonnes spécifiées Les autres transactions ne pourront modifier les valeurs tant que le
curseur n’aura pas quitté cette ligne
18

Cours Base de donnèes 18


 CURSEUR

19

Cours Base de donnèes 19


 CURSEUR

Clause WHERE CURRENT OF – Exemple


Modifier les lignes correspondantes à un critère avec un curseur.

20

Cours Base de donnèes 20


•4
• GESTION DES ERREURS
(EXCEPTION)
 GESTION DES ERREURS (EXCEPTION)

Exception

• Une exception est une erreur qui survient durant une exécution
 2 types d’exception :

Interne :execption définie par le système


Externe :exception définie par l’utilisateur

22

Cours Base de donnèes 22


 GESTION DES ERREURS (EXCEPTION)

Exception

 Les exceptions internes sont générées par le moteur du système (division par zéro,
connexion non établie, table inexistante, privilèges insuffisants, mémoire saturée,
espace disque insuffisant, ...).

Une erreur interne est produite quand un bloc PL/Sql ne suit pas une règle
d'Oracle ou dépasse une limite dépendant du système d'exploitation.

Chaque erreur ORACLE correspond un code SQL (SQLCODE)

 Les exceptions externes sont générées par l’utilisateur.

23

Cours Base de donnèes 23


 GESTION DES ERREURS (EXCEPTION)

Intercepter les Exceptions - Syntaxe

24

Cours Base de donnèes 24


 GESTION DES ERREURS (EXCEPTION)

 Règles pour intercepter les Exceptions

 Le mot clé EXCEPTION débute la section de la gestion des exceptions


Plusieurs exceptions sont permises (définie et prédéfinie)
Une seule exception est exécutée avant de sortir d’un bloc
WHEN OTHERS est la dernière clause
Intercepte toutes les exceptions non gérées dans la même section d’exception
Utilisez le gestionnaire d’erreurs OTHERS et placez le en dernier lieu après tous les
autres gestionnaire d’erreurs, sinon il interceptera toutes les exceptions mêmes celle qui
sont prédéfinies

25

Cours Base de donnèes 25


 GESTION DES ERREURS (EXCEPTION)

 Les erreurs internes d’Oracle prédéfinies

26

Cours Base de donnèes 26


 GESTION DES ERREURS (EXCEPTION)

 Les erreurs internes d’Oracle prédéfinies

CURSOR_ALREADY_OPEN : tentative d’ouverture d’un curseur déjà ouvert.


DUP_VAL_ON_INDEX: insertion d’une ligne en doublon
INVALID_CURSOR : opération incorrecte sur un curseur, comme par exemple la
fermeture d’un curseur qui n’a pas été ouvert.
LOGIN_DENIED : connexion à la base échouée car le nom utilisateur ou le mot de
passe est invalide.
NO_DATA_FOUND : déclenché si la commande SELECT INTO ne retourne aucune
ligne ou si on fait référence à un enregistrement non initialise d’un tableau PL/SQL.
NOT_LOGGED_ON : tentative d’accès à la base sans être connecté.
PROGRAM_ERROR : problème général dû au PL/SQL
27

Cours Base de donnèes 27


 GESTION DES ERREURS (EXCEPTION)

 Les erreurs internes d’Oracle prédéfinies

ROWTYPE_MISMATCH : survient lorsque une variable curseur d’un programme hôte


retourne une valeur dans une variable curseur d’un bloc PL/SQL qui n’a pas le même
type.
STORAGE_ERROR : problème de ressources mémoire dû à PL/SQL.
TIMEOUT_ON_RESOURCE : dépassement du temps dans l’attente de libération des
ressources (lié aux paramètres de la base).
TOO_MANY_ROWS : la commande SELECT INTO retourne plus d’une ligne.
VALUE_ERROR : erreur arithmétique, de conversion, ou de contrainte de taille.
ZERO_DIVIDE : tentative de division par zéro.

28

Cours Base de donnèes 28


 GESTION DES ERREURS (EXCEPTION)

 Exemple exception interne

29

Cours Base de donnèes 29


 GESTION DES ERREURS (EXCEPTION)

 Exceptions Utilisateur (externes)


PL/SQL permet à l'utilisateur de définir ses propres exceptions.
La gestion des anomalies utilisateur peut se faire dans un bloc PL/SQL en effectuant les opérations suivantes :
1. Nommer l'erreur (type exception) dans la partie Declare du bloc.
2. DECLARE Nom_ano Exception;
3. Déterminer l'erreur et passer la main au traitement approprié par la commande Raise. BEGIN If
(condition_anomalie) then raise Nom_ano ;
4. Effectuer le traitement défini dans la partie EXCEPTION du Bloc. EXCEPTION WHEN (Nom_ano) then
(traitement);

30

Cours Base de donnèes 30


 GESTION DES ERREURS (EXCEPTION)

 Exceptions Utilisateur (externes)

31

Cours Base de donnèes 31


 GESTION DES ERREURS (EXCEPTION)

 Exceptions Utilisateur (externes)

32

Cours Base de donnèes 32


 GESTION DES ERREURS (EXCEPTION)

Fonctions d’interception des erreurs

SQLCODE
 Renvoie la valeur numérique associé au code de l’erreur.
 Vous pouvez l’assigneer à une variable de type number

SQLERRM
 Renvoie le message associé au code de l’erreur.

33

Cours Base de donnèes 33


 GESTION DES ERREURS (EXCEPTION)

 Exemple de SQLCODE

34

Cours Base de donnèes 34


 GESTION DES ERREURS (EXCEPTION)

35

Cours Base de donnèes 35


•5
PROCEDURES,
FONCTIONS ET
PACKAGES
 PROCÉDURES, FONCTIONS ET PACKAGE

 Généralité

 Une procédure est un bloc PL/SQL nommé.


Une fonction est une procédure qui retourne une valeur.
Un package est un agrégat de procédures et de fonctions.
 Les packages, procédures, ou fonctions peuvent être appelés depuis toutes les
applications qui possèdent une interface avec ORACLE (SQL*PLUS…)

37

Cours Base de donnèes 37


 PROCEDURES,FONCTIONS ET PACKAGE

 Généralité
Les procédures (fonctions) permettent de :
Réduire le trafic sur le réseau (les procédures sont locales sur le serveur)
Mettre en œuvre une architecture client/serveur de procédureset rendre indépendant le code
client de celui des procédures
Masquer la complexité du code SQL (simple appel de procédure avec passage d’arguments)
Optimiser le code (les procédures sont compilées avant l’exécution du programme et elles sont
exécutées immédiatement si elles se trouvent dans la SGA (zone mémoire
gérée par ORACLE). De plus une procédure peut être exécutée par plusieurs utilisateurs.

38

Cours Base de donnèes 38


 PROCÉDURES, FONCTIONS ET PACKAGE

Généralité
 Les packages permettent :
De regrouper des procédures ou des fonctions (ou les deux). On évite ainsi d’avoir autant de
sources que de procédures.
De travailler en équipes et l’architecture applicative peuvent donc plus facilement s’organiser du
côté serveur, où les packages regrouperont des procédures (Sélection de tous les articles, Sélection
d’un article, Mise à jour d’un article, Suppression d’un article, Ajout d’un article).
 Les packages sont utilisés comme de simples librairies par les programmes clients
(librairies distantes « sur le serveur »)

39

Cours Base de donnèes 39


 PROCÉDURES

Procédures
 Les procédures ont un ensemble de paramètres modifiables en entrée et en sortie.

40

Cours Base de donnèes 40


 PROCÉDURES

Procédures

41

Cours Base de donnèes 41


 PROCÉDURES

Procédure Exemple
Compter le nombre d'employés pour un département donné.

42

Cours Base de donnèes 42


 PROCÉDURES, FONCTIONS ET PACKAGE

Procédure Exemple

Exemple de procédure qui modifie le salaire d’un employé.


Arguments : Identifiant de l’employée, Taux

43

Cours Base de donnèes 43


 PROCEDURES

44

Cours Base de donnèes 44


 COMPILATION DE LA PROCÉDURE

 Il faut compiler le fichier sql qui s’appelle ici modifie_salaire.sql (attention dans cet
exemple le nom du script correspond à celui de la procédure, c’est bien le nom du script
sql qu’il faut passer en argument à la commande start).

45

Cours Base de donnèes 45


 APPEL DE LA PROCÉDURE

46

Cours Base de donnèes 46


 APPEL DE LA PROCÉDURE

47

Cours Base de donnèes 47


 CORRECTION DES ERREURS

Si le script contient des erreurs, la commande show err permet de visualiser les erreurs.
Pour visualiser le script global :
commande l (lettre l)
pour visualiser la ligne 4 : commande l4

48

Cours Base de donnèes 48


 FONCTIONS

Fonctions
 Une fonction est une procédure qui retourne une valeur. La seule différence syntaxique
par rapport à une procédure se traduit par la présence du mot clé RETURN.
Une fonction précise le type de donnée qu’elle retourne dans son prototype (signature
de la fonction).
Le retour d’une valeur se traduit par l’instruction RETURN (valeur).

49

Cours Base de donnèes 49


 FONCTIONS

Fonctions(Exemple)

 Compter le nombre d'employés pour un département donné.

50

Cours Base de donnèes 50


 FONCTIONS

51

Cours Base de donnèes 51


 LES PACKAGES

52

Cours Base de donnèes 52


 LA STRUCTURE GÉNÉRALE D’UN PACKAGE

53

Cours Base de donnèes 53


 LA STRUCTURE GÉNÉRALE D’UN PACKAGE

 Un package est composé d’un en tête et d’un corps :

L’en tête comporte les types de données définis et les prototypes de toutes les procédures
(fonctions) du package.
Le corps correspond à l’implémentation (définition) des procédures (fonctions).
 Le premier END marque la fin de l’en tête du package. Cette partie doit se terminer par / pour
que l’en tête soit compilé.
Le corps (body) du package consiste à implémenter (définir) l’ensemble des procédures ou
fonctions qui le constitue. Chaque procédure est définie normalement avec ses clauses BEGIN ...
END.
Le package se termine par / sur la dernière ligne.

54

Cours Base de donnèes 54


 LA STRUCTURE GÉNÉRALE D’UN PACKAGE

 Exemple

55

Cours Base de donnèes 55


 LA STRUCTURE GÉNÉRALE D’UN PACKAGE

 Compilation du package paquet1

56

Cours Base de donnèes 56


 LA STRUCTURE GÉNÉRALE D’UN PACKAGE

57

Cours Base de donnèes 57


 EXERCICES

 Considérez les relations suivantes :

Employe(nuempl:string, nomempl:string, hebdo: integer,salaire integer, #affect:integer)


Service(nuserv:integer, nomserv:string, #chef:integer)
Projet(nuproj:integer, nomproj:string, #resp:integer)
Travail(#nuempl:integer, #nuproj:integer, duree:integer)
I. Ecrire une procédure qui prend comme arguments un identifiant d'employé et un
nombre, puis mettre à jour le salaire de l'employé donné avec le nombre donné.
II. Ecrire une fonction qui compte le nombre d'employés participant à un projet donné.
III. Ecrire une fonction qui compte le nombre de projets supervisés par les employés d'un
service donné
IV. Ecrire une fonction qui compte le nombre de projets auxquels participe l'employé
donné
58

Cours Base de donnèes 58

Vous aimerez peut-être aussi