I. Introduction Une procédure ou une fonction stockée est un bloc PL/SQL nommé pouvant accepter des paramètres et être appelée. Généralement, on utilise une fonction pour calculer une valeur. Les procédures et les fonctions possèdent une structure semblable sauf qu'une fonction doit retourner une valeur à l'environnement appelant. Comme les procédures, les fonctions sont composées de quatre parties : un en-tête, une section déclarative, une partie exécutable et une partie optionnelle de gestion d'erreur. Les procédures et les fonctions sont compilées et stockées dans la base de données, comme tout autre objet (donnée) manipulé par le moteur du SGBD. Les performances sont assurées par les facteurs suivants : Les procédures et les fonctions stockées n ont pas besoin d'être analysées une seconde fois à l'exécution (gain de temps : pas de recompilation). Un gain de place en mémoire contribue à cette amélioration de performances car la procédure chargée en mémoire pour son exécution est partagée par tous les objets qui la demandent (applications). De plus la procédure s exécute immédiatement si elle en mémoire (réduction des accès disque), Réduction du trafic sur le réseau (soumission d'un bloc PL/SQL au moteur au lieu d'une commande SQL). II. Les fonctions stockées Une fonction est un sous-programme qui calcule une valeur. Pour créer une fonction, on utilise la commande CREATE FUNCTION, dans laquelle on peut spécifier une liste de paramètres. Dans cette commande on doit définir la valeur qui sera retournée à l'environnement appelant et définir les actions effectuées par le bloc PL/SQL standard. II.1. Syntaxe de création d une fonction stockée CREATE [OR REPLACE] FUNCTION Function_name ( parameter1 [ mode1] datatype1, parameter2 [ mode2] datatype2,...) RETURN datatype IS AS -- déclaration des variables locals -- code de la fonction Wafa WALHA 1/5 ISET Tozeur
RETURN(Valeur) EXCEPTION Traitement des exceptions END ; Paramètre Function_name Parameter Mode Datatype RETURN datatype Nom de la fonction Nom de la variable PL/SQL dont la valeur est passée à la fonction Le type de paramètre ; seul le paramètre IN doit être déclaré Type de donnée du paramètre Type de donnée de la valeur RETURN qui doit être renvoyée par la fonction Remarques : L'option REPLACE indique que si la fonction existe déjà, elle sera remplacée par la nouvelle version crée par la requête. Le type de donnée du RETURN ne doit avoir de taille spécifiée. Le bloc PL/SQL commence soit par un soit par une section de déclaration de variables locales et se termine par END ou END function_name. Il doit obligatoirement y avoir au moins une expression RETURN (variable). Il est impossible de faire référence à des variables hôtes ou à des variables de substitution dans le bloc PL/SQL d'une fonction stockée. CREATE OR REPLACE FUNCTION SOMME(N1 NUMBER, N2 NUMBER) RETURN NUMBER IS S:=N1+N2; RETURN(S); II.2. Appel d une fonction stockée Les fonctions sont appelées à l'intérieur d'expression PL/SQL. Pour que la fonction s'exécute convenablement il faut créer une variable hôte pour y stocker la valeur retournée. Lors de Wafa WALHA 2/5 ISET Tozeur
l'exécution, la variable hôte est initialisée avec la valeur renvoyée par le RETURN. Une fonction peut accepter plusieurs paramètres IN mais elle ne doit retourner qu'une seule valeur. DECLARE S:=SOMME(10,12); DBMS_OUTPUT.PUT_LINE(S); III. Les procédures stockées Pour créer une procédure, on utilise l'expression CREATE PROCEDURE qui définit les actions qui seront exécutées par le bloc PL/SQL. Cette expression peut définir une liste de paramètres. III.1. Syntaxe de création d une procédure stockée CREATE [OR REPLACE] PROCEDURE Procedure_name (parameter1[mode1] datatype1, parameter2 [mode2] datatype2,...) IS AS -- déclaration des variables locals -- code de la procédure Paramètre Procedure_name Parameter Mode Datatype Nom de la procédure Nom de la variable PL/SQL qui est passée, retournée à l environnement appelant, ou les deux suivant le mode choisit Type de l argument : IN (par défaut) OUT IN OUT Type de donnée de l argument Remarques : Le bloc PL/SQL commence par un ou la déclaration des variables locales et se termine par END ou END procedure_name. Il est impossible de faire référence à des variables hôtes ou à des variables de substitution. Wafa WALHA 3/5 ISET Tozeur
L'option REPLACE indique que si la procédure existe déjà, elle sera supprimée et remplacée par celle créée par la requête. CREATE OR REPLACE PROCEDURE SOMME(N1 IN NUMBER, N2 IN NUMBER, S OUT NUMBER) IS S:=N1+N2; III.2. Les modes de paramètres d une procédure stockée Les paramètres de la procédure permettent de transférer des valeurs depuis et vers l'environnement appelant. Les paramètres possèdent chacun trois modes : IN, OUT et IN OUT. Type de paramètre IN (par défaut) OUT IN OUT Une valeur constante est passée de l environnement appelant vers la procédure Une valeur est passée de la procédure vers l environnement appelant Une valeur constante est passée de l environnement appelant vers la procédure et une valeur différente peut être renvoyée à l environnement en utilisant le même paramètre. III.3. Appel d une procédure stockée Les procédures peuvent être appelées à partir de procédures stockées. Pour ce faire, il faut utiliser le nom de la procédure comme pour l'appel à partir de blocs anonymes. Exemple : DECLARE SOMME(10,12,S); DBMS_OUTPUT.PUT_LINE(S); III. Comparaison entre procédures et fonctions stockées Les procédures sont créées pour stocker une série d'actions à exécuter ultérieurement. Une procédure peut accepter ou non des paramètres, qui ne sont pas limités en nombre et peuvent être transférés du et vers l'environnement appelant. Une procédure ne retourne pas nécessairement une valeur. Les fonctions sont créées pour calculer une valeur, elles doivent retourner une valeur à l'environnement appelant. Une fonction peut accepter ou non des paramètres qui sont transmis de Wafa WALHA 4/5 ISET Tozeur
l'environnement. Une fonction ne peut retourner qu'une seule valeur et ne peut pas accepter de paramètre OUT ou IN OUT. Cependant si l'on en déclare il ne se produira pas d'erreurs de compilation mais il est conseillé de ne jamais en utiliser. Procédure S exécute comme une requête PL/SQL Pas de type de donnée RETURN Peut retourner une, aucune ou plusieurs valeurs Fonction Est appelé dans une expression Doit avoir un type de donnée RETURN Ne retourne qu une seule valeur Une procédure contenant un seul paramètre OUT peut être réécrite en tant que fonction en utilisant le paramètre OUT pour la valeur retournée. IV. Les avantages des procédures et fonctions stockées En plus d'apporter un développement modulaire des applications, les procédures et fonctions stockées ont d'autres avantages : Amélioration des performances Evite de repasser les lignes pour les différents utilisateurs en exploitant la zone SQL partagée. Evite le parcage PL/SQL à l'exécution en partant lors de la compilation. Réduit le nombre d'appels à la base de données et diminue le trafic réseau en envoyant les commandes par paquets. Amélioration de la maintenance Possibilité de modifier les routines on-line sans interférer avec les autres utilisateurs Possibilité de modifier une routine pour affecter toutes les applications Possibilité de modifier une seule routine pour éviter les tests en double Amélioration de l'intégrité et de la sécurité des données Contrôle indirect de l'accès aux objets de la base de données des utilisateurs ne possédant pas de privilèges de sécurité Assurance que les actions liées sont exécutées ensemble, ou pas du tout, en centralisant l'activité des tables liées. Wafa WALHA 5/5 ISET Tozeur