(	
  

LABORATOIRE D’INFORMATIQUE DE
L’UNIVERSITE DE PAU ET DES PAYS
DE L’ADOUR

BDD Avancées

Fonctions et Procédures

Ri...
Plan	
  
Introduction	
  
Procédure
Fonction

10/12/13
Page 2

Package
Introduction
•  Ces objets sont stockés une seule fois
dans la base
•  Ils sont partageables et gérées par
plusieurs appli...
Introduction
•  Pour créer un objet procédural, il faut
posséder les privilèges
–  CREATE PROCEDURE (création locale)
–  C...
Introduction
•  Pour exécuter un objet procédural, il faut
posséder les privilèges
–  EXECUTE PROCEDURE (exécution locale)...
Procédure
•  Est un bloc PL/SQL nommé pouvant contenir
– 
– 
– 
– 
– 

• 
• 
• 
• 

Des commandes SQL (LMD)
Des instructio...
Procédure
•  Concernant la sécurité
–  On peut autoriser l'accès à certaines tables
uniquement à travers des procédures sa...
Procédure
•  Concernant l'intégrité
–  Les procédures assurent la même
fonctionnalité indépendamment de la partie
appelant...
Procédure
•  Concernant les performances
–  Réduction du trafic sur le réseau par la soumission
d'un bloc PL/SQL au lieu d...
Procédure
•  Structure générale

PROCEDURE nom_procédure [(paramètres, …)] {IS | AS}
Déclaration des variables locales
BEG...
Procédure
•  Création
CREATE [OR REPLACE] PROCEDURE [schéma.]nom_procédure
[(paramètres, …)] {IS | AS}
Déclaration des var...
Procédure
•  Exemple : Augmentation de salaire

10/12/13
Page 12

CREATE OR REPLACE PROCEDURE Augmentation_salaire
(NumSal...
Procédure
•  Exécution de la procédure
AugmentationSalaire

BEGIN
A partir d'une autre procédure …
AugmentationSalaire (10...
Procédure
•  Mais PL/SQL exige la déclaration d'une
procédure avant de l'utiliser
DECLARE
PROCEDURE AccorderAugmentation (...
Procédure
•  Mais PL/SQL exige la déclaration d'une
procédure avant de l'utiliser
Solution 1
DECLARE
PROCEDURE Augmentatio...
Procédure
•  Mais PL/SQL exige la déclaration d'une
procédure avant de l'utiliser
Solution 2
DECLARE
PROCEDURE Augmentatio...
Procédure
•  Surcharge ou overloading
–  Possible dans un bloc ou un package
–  Pas possible si seulement les noms des
par...
Procédure
•  Modification d'une procédure
–  Après n'importe quelle modification dans
une procédure, on est obligé de reco...
Procédure
•  Suppression d'une procédure

SQL> DROP PROCEDURE [Schéma.]nom_procédure;

10/12/13
Page 19
Procédure
•  Exemple
CREATE PROCEDURE suppression_Salarié (num_emp number) AS
BEGIN
DELETE FROM emp WHER empno = num_emp;
...
Procédure
•  Exemple
CREATE PROCEDURE suppression_Salarié (num_emp number) AS
BEGIN
DELETE FROM emp WHER empno = num_emp;
...
Procédure
•  Les sources de vos procédures sont
stockées dans
–  USER_SOURCE
–  ALL_SOURCE
–  DBA_SOURCE

10/12/13
Page 22
Procédure externe
•  A partir de la version 8i, on peut intégrer
des procédures écrites dans d'autres
langages (Java, C, P...
Fonction
•  Est une procédure qui renvoie une valeur
•  Possède dans sa structure la clause
supplémentaire RETURN
•  Peut ...
Fonction
•  Création d'une fonction stockée
CREATE [OR REPLACE] FUNCTION [schéma.]nom_fonction
[(paramètres, …)] RETURN ty...
Fonction
•  Exemple d'une fonction
VérificationSalaire
CREATE or replace FUNCTION VérificationSalaire (NumGrade integer, M...
Fonction
•  Exécution de la fonction
VérificationSalaire

A partir d'une autre procédure

A partir de SQL*Plus

10/12/13
P...
Fonction
•  Suppression d'une fonction

SQL> DROP FUNCTION [Schéma.]nom_fonction;

10/12/13
Page 28
Fonction
•  Surcharge ou overloading
–  Pas possible si seul le type retourné est
différent

10/12/13
Page 29
Package
•  Permet d'encapsuler dans une unité de la
BDD plusieurs
–  Procédures, fonctions, curseurs et variables

•  Ne p...
Package
•  Se compose de deux parties

Spécification
Application
Corps

10/12/13
Page 31

BDD Oracle
Package
•  Création d'un Package
–  Création des spécifications
•  Consiste à déclarer les procédures, fonctions, constate...
Package
•  Création d'un Package
–  Création de la section spécification

CREATE [OR REPLACE] PACKAGE [Schéma.]nom_package...
Package
•  Création d'un Package
–  Création du corps

CREATE [OR REPLACE] PACKAGE BODY [Schéma.]nom_package {IS |AS}
Décl...
Package
•  Exemple
CREATE OR REPLACE PACKAGE Gestion_Salarié IS
FUNCTION Embaucher (nom VARCHAR2, fonction VARCHAR2, Chef ...
Package
•  Exemple
CREATE OR REPLACE PACKAGE BODY Gestion_Salarié IS
FUNCTION Embaucher (nom VARCHAR2, fonction VARCHAR2, ...
Package
•  Appel d'une procédure ou fonction packagée

A partir de SQL*Plus

SQL> EXECUTE Nompackage.nom_procédure [(param...
Package
•  Suppression d'un package

SQL> DROP PACKAGE [Schéma.]nom_package;

10/12/13
Page 38
Merci !

10/12/13
Page 39
Prochain SlideShare
Chargement dans…5
×

Plsql2

627 vues

Publié le

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
627
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Plsql2

  1. 1. (   LABORATOIRE D’INFORMATIQUE DE L’UNIVERSITE DE PAU ET DES PAYS DE L’ADOUR BDD Avancées Fonctions et Procédures Richard Chbeir, Ph.D.
  2. 2. Plan   Introduction   Procédure Fonction 10/12/13 Page 2 Package
  3. 3. Introduction •  Ces objets sont stockés une seule fois dans la base •  Ils sont partageables et gérées par plusieurs applications de façon centralisée •  Ils sont soumis à tous les mécanismes de sécurité et de confidentialité 10/12/13 Page 3
  4. 4. Introduction •  Pour créer un objet procédural, il faut posséder les privilèges –  CREATE PROCEDURE (création locale) –  CREATE ANY PROCEDURE (création dans d'autres schémas) 10/12/13 Page 4
  5. 5. Introduction •  Pour exécuter un objet procédural, il faut posséder les privilèges –  EXECUTE PROCEDURE (exécution locale) –  EXECUTE ANY PROCEDURE (exécution dans d'autres schémas) •  Pour donner à un autre utilisateur le droit d'exécution –  GRANT EXECUTE ON ma_procédure TO autre_utilisateur 10/12/13 Page 5
  6. 6. Procédure •  Est un bloc PL/SQL nommé pouvant contenir –  –  –  –  –  •  •  •  •  Des commandes SQL (LMD) Des instructions PL/SQL Des variables et des constantes Des curseurs Un gestionnaire d'erreurs Peut être paramétrée et exécutée Utilisée pour réaliser une (ou plusieurs) action(s) Peut être récursif et surchargé Est compilé avant le stockage –  Ne nécessite plus d'analyse ni de compilation à l'exécution –  Sa mise en mémoire permettra d'améliorer les performances 10/12/13 Page 6
  7. 7. Procédure •  Concernant la sécurité –  On peut autoriser l'accès à certaines tables uniquement à travers des procédures sans avoir des droits d'accès aux tables en dehors des procédures 10/12/13 Page 7
  8. 8. Procédure •  Concernant l'intégrité –  Les procédures assurent la même fonctionnalité indépendamment de la partie appelante –  La recompilation d'une procédure en cas de modification n'exige pas la recompilation de l'ensemble du code de l'application 10/12/13 Page 8
  9. 9. Procédure •  Concernant les performances –  Réduction du trafic sur le réseau par la soumission d'un bloc PL/SQL au lieu de plusieurs commandes SQL –  Compilation des procédures cataloguées (le moteur ne recompile pas les procédures au moment de l'exécution –  Exécution immédiate de la procédure si elle est dans la SGA (pas d'accès disque) –  Partage de l'exécution d'une procédure par plusieurs utilisateurs (notion de mémoire partagée) 10/12/13 Page 9
  10. 10. Procédure •  Structure générale PROCEDURE nom_procédure [(paramètres, …)] {IS | AS} Déclaration des variables locales BEGIN Instructions SQL et PL/SQL EXCEPTION Traitement des exceptions END [nom_procédure]; 10/12/13 Page 10
  11. 11. Procédure •  Création CREATE [OR REPLACE] PROCEDURE [schéma.]nom_procédure [(paramètres, …)] {IS | AS} Déclaration des variables locales BEGIN Instructions SQL et PL/SQL EXCEPTION Traitement des exceptions END [nom_procédure]; Nomparametre [ IN | OUT | IN OUT] type [{:=default}] 10/12/13 Page 11 IN: variable passée en entrée (Par défaut) OUT : variable renseignée par la procédure puis envoyée à l'appelant IN OUT : passage par référence Le type ne doit pas contenir d'indication sur sa taille
  12. 12. Procédure •  Exemple : Augmentation de salaire 10/12/13 Page 12 CREATE OR REPLACE PROCEDURE Augmentation_salaire (NumSal integer, Montant Real) IS SalaireActuel Real; SalaireNull Exception; BEGIN SELECT sal into SalaireActuel FROM emp where empno = NumSal; IF (SalaireActuel IS NULL) THEN RAISE SalaireNull; ELSE UPDATE emp set sal = sal + Montant Where empno = NumSal; END IF; EXCEPTION WHEN no_data_found THEN dbms_output.put_line(NumSal || 'Est inconnu'); WHEN SalaireNull THEN dbms_output.put_line(NumSal || 'a un Salaire Null'); END Augmentation_Salaire; /
  13. 13. Procédure •  Exécution de la procédure AugmentationSalaire BEGIN A partir d'une autre procédure … AugmentationSalaire (100, 1000); … A partir de SQL*Plus 10/12/13 Page 13 SQL> EXECUTE AugmentationSalaire (100, 1000);
  14. 14. Procédure •  Mais PL/SQL exige la déclaration d'une procédure avant de l'utiliser DECLARE PROCEDURE AccorderAugmentation (. . .) IS BEGIN AugmentationSalaire (. . .); -- non déclarée END; PROCEDURE AugmentationSalaire (. . .) IS BEGIN ... END; ... 10/12/13 Page 14
  15. 15. Procédure •  Mais PL/SQL exige la déclaration d'une procédure avant de l'utiliser Solution 1 DECLARE PROCEDURE AugmentationSalaire (. . .) IS BEGIN ... END; PROCEDURE AccorderAugmentation (. . .) IS BEGIN AugmentationSalaire (. . .); -- déjà déclarée END; ... 10/12/13 Page 15
  16. 16. Procédure •  Mais PL/SQL exige la déclaration d'une procédure avant de l'utiliser Solution 2 DECLARE PROCEDURE AugmentationSalaire (…); --forward declaration PROCEDURE AccorderAugmentation (. . .) IS BEGIN AugmentationSalaire (. . .); -- déjà déclarée END; PROCEDURE AugmentationSalaire (. . .) IS BEGIN ... END; ... 10/12/13 Page 16
  17. 17. Procédure •  Surcharge ou overloading –  Possible dans un bloc ou un package –  Pas possible si seulement les noms des paramètres ou leur mode de passage sont différents DECLARE …. PROCEDURE Augmentation_salaire (NumSal integer, Montant Real) IS … END Augmentation_Salaire; PROCEDURE Augmentation_salaire (Montant Real) IS … END Augmentation_Salaire; / 10/12/13 Page 17
  18. 18. Procédure •  Modification d'une procédure –  Après n'importe quelle modification dans une procédure, on est obligé de recompiler avec SQL> ALTER PROCEDURE [Schéma.]nom_procédure COMPILE; •  Exemple SQL> ALTER PROCEDURE AugmentationSalaire COMPILE; 10/12/13 Page 18
  19. 19. Procédure •  Suppression d'une procédure SQL> DROP PROCEDURE [Schéma.]nom_procédure; 10/12/13 Page 19
  20. 20. Procédure •  Exemple CREATE PROCEDURE suppression_Salarié (num_emp number) AS BEGIN DELETE FROM emp WHER empno = num_emp; END / Quelles sont les erreurs identifiées ? SQL> SHOW ERRORS ERRO…. 10/12/13 Page 20
  21. 21. Procédure •  Exemple CREATE PROCEDURE suppression_Salarié (num_emp number) AS BEGIN DELETE FROM emp WHER empno = num_emp; END / Quelles sont les erreurs identifiées ? –  On peut également interroger •  USER_ERRORS, ALL_ERRORS, DBA_ERRORS 10/12/13 Page 21
  22. 22. Procédure •  Les sources de vos procédures sont stockées dans –  USER_SOURCE –  ALL_SOURCE –  DBA_SOURCE 10/12/13 Page 22
  23. 23. Procédure externe •  A partir de la version 8i, on peut intégrer des procédures écrites dans d'autres langages (Java, C, Pascal, etc.) 10/12/13 Page 23
  24. 24. Fonction •  Est une procédure qui renvoie une valeur •  Possède dans sa structure la clause supplémentaire RETURN •  Peut être utilisée dans les requêtes SQL FUNCTION nom_fonction [(paramètres, …)] RETURN type {IS | AS} Déclaration des variables locales BEGIN Instructions SQL et PL/SQL RETURN (valeur); EXCEPTION Traitement des exceptions END [nom_fonction]; 10/12/13 Page 24 Nomparamètre [IN] type [, nomparamètre2 [IN] type … Où type ne doit pas contenir d'indication sur la taille
  25. 25. Fonction •  Création d'une fonction stockée CREATE [OR REPLACE] FUNCTION [schéma.]nom_fonction [(paramètres, …)] RETURN type {IS | AS} Déclaration des variables locales BEGIN Instructions SQL et PL/SQL RETURN (Valeur); EXCEPTION Traitement des exceptions END [nom_fonction]; 10/12/13 Page 25
  26. 26. Fonction •  Exemple d'une fonction VérificationSalaire CREATE or replace FUNCTION VérificationSalaire (NumGrade integer, Montant Real) RETURN boolean AS MinSalaire Real; MaxSalaire Real; BEGIN SELECT losal, hisal INTO MinSalaire, MaxSalaire FROM salgrade WHERE grade = NumGrade; RETURN ((Montant >= MinSalaire) AND (Montant <= MaxSalaire)); END VérificationSalaire; / 10/12/13 Page 26
  27. 27. Fonction •  Exécution de la fonction VérificationSalaire A partir d'une autre procédure A partir de SQL*Plus 10/12/13 Page 27 BEGIN … IF VérificationSalaire (100, 1000) THEN … SQL> select VérificationSalaire (100, 1000) FROM Dual;
  28. 28. Fonction •  Suppression d'une fonction SQL> DROP FUNCTION [Schéma.]nom_fonction; 10/12/13 Page 28
  29. 29. Fonction •  Surcharge ou overloading –  Pas possible si seul le type retourné est différent 10/12/13 Page 29
  30. 30. Package •  Permet d'encapsuler dans une unité de la BDD plusieurs –  Procédures, fonctions, curseurs et variables •  Ne peut pas être appelé, paramétré, ou imbriqué •  Apporte plusieurs avantages –  Meilleure gestion de privilèges –  Meilleur moyen de structuration et de d'organisation –  Meilleures performances •  Le moteur charge au noyau le package entier 10/12/13 Page 30
  31. 31. Package •  Se compose de deux parties Spécification Application Corps 10/12/13 Page 31 BDD Oracle
  32. 32. Package •  Création d'un Package –  Création des spécifications •  Consiste à déclarer les procédures, fonctions, constates, variables, et les exceptions accessibles par le public autorisé –  Création du corps •  Consiste à définir les procédures, fonctions, constates, variables, et les exceptions déclarées dans la section spécifications du package •  Peut contenir également d'autres objets (privés) non déclarés dans la spécification qui seront inaccessibles en dehors du corps du package •  Toute l'implémentation est cachée aux applications 10/12/13 Page 32
  33. 33. Package •  Création d'un Package –  Création de la section spécification CREATE [OR REPLACE] PACKAGE [Schéma.]nom_package {IS |AS} Déclatation des variables globales Interface des sous-programmes END [nom_package]; 10/12/13 Page 33
  34. 34. Package •  Création d'un Package –  Création du corps CREATE [OR REPLACE] PACKAGE BODY [Schéma.]nom_package {IS |AS} Déclaration des variables locales corps des sous-programmes publics et privés BEGIN …. END [nom_package]; 10/12/13 Page 34
  35. 35. Package •  Exemple CREATE OR REPLACE PACKAGE Gestion_Salarié IS FUNCTION Embaucher (nom VARCHAR2, fonction VARCHAR2, Chef NUMBER, eentrée DATE, salaire NUMBER, commission NUMBER, NuméroDept NUMBER) RETURN NUMBER; PROCEDURE Suppression_Salarié (NuméroSalarié NUMBER); PROCEDURE Augmentation_Salaire (NumSal NUMBER, Montant REAL); END Gestion_Salarié ; 10/12/13 Page 35
  36. 36. Package •  Exemple CREATE OR REPLACE PACKAGE BODY Gestion_Salarié IS FUNCTION Embaucher (nom VARCHAR2, fonction VARCHAR2, Chef NUMBER, dateentrée DATE, salaire NUMBER, commission NUMBER, NuméroDept NUMBER) RETURN NUMBER IS Nouveau NUMBER(8); BEGIN SELECT MAX(empno)+1 INTO Nouveau FROM emp; INSERT INTO emp VALUES (Nouveau, nom, fonction, chef, dateentrée, salaire, commission, NuméroDept); RETURN (Nouveau); END Embaucher; PROCEDURE Suppression_Salarié (NuméroSalarié NUMBER); … END Suppression_Salarié; PROCEDURE Augmentation_Salaire (NumSal NUMBER, Montant REAL); … END Augmentation_Salaire; END Gestion_Salarié ; 10/12/13 Page 36
  37. 37. Package •  Appel d'une procédure ou fonction packagée A partir de SQL*Plus SQL> EXECUTE Nompackage.nom_procédure [(paramètre)]; A partir d'une autre procédure 10/12/13 Page 37 BEGIN … Nompackage.nomprocédure [(paramètres)]; …
  38. 38. Package •  Suppression d'un package SQL> DROP PACKAGE [Schéma.]nom_package; 10/12/13 Page 38
  39. 39. Merci ! 10/12/13 Page 39

×