Your SlideShare is downloading. ×
0
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Plsql2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
261
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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. Plan   Introduction   Procédure Fonction 10/12/13 Page 2 Package
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Procédure •  Suppression d'une procédure SQL> DROP PROCEDURE [Schéma.]nom_procédure; 10/12/13 Page 19
  • 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. 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. Procédure •  Les sources de vos procédures sont stockées dans –  USER_SOURCE –  ALL_SOURCE –  DBA_SOURCE 10/12/13 Page 22
  • 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. 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. 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. 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. 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. Fonction •  Suppression d'une fonction SQL> DROP FUNCTION [Schéma.]nom_fonction; 10/12/13 Page 28
  • 29. Fonction •  Surcharge ou overloading –  Pas possible si seul le type retourné est différent 10/12/13 Page 29
  • 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. Package •  Se compose de deux parties Spécification Application Corps 10/12/13 Page 31 BDD Oracle
  • 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. 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. 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. 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. 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. 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. Package •  Suppression d'un package SQL> DROP PACKAGE [Schéma.]nom_package; 10/12/13 Page 38
  • 39. Merci ! 10/12/13 Page 39

×