Vous êtes sur la page 1sur 8

Procédures et fonctions

L·’utilisation de procédure ou de fonctions stockées permet d’enregistrer et


d’exécuter des traitement fréquemment utilisés au niveau du noyan du SGBD
plutôt que dans chaque application. Un seul exemplaire du traitement est donc
défini et stocké dans la base et il est exécutable, en mode partagé, par toutes les
applications qui y font référence.
Ces procédures peuvent être programmées soit en langage PL/SQL, soit en langage
Java, ou en C.
Etapes du développement:
Une procédure ou une fonction est décrite par l’ordre CREATE PROCEDURE ou
CREATE FUNCTION. L’exécution de cet ordre déclenche automatiquement trois
étapes au niveau du SGBD:
1) Compilation du texte source avec génération d’un pseudo-code si aucune
erreur de syntaxe n’est détectée.
2) Stockage du texte source dans la base, même si des erreurs sont détectées.
3)Stockage du pseudocode dans la base, ce qui évite la recompilation de la
procédure ou de la fonction à chaque appel.
© Base de données Avancees / M.MOURCHID, 2022-2023

Procédures et fonctions : Création


Syntaxe: Procédure
CREATE [ OR REPLACE ] PROCEDURE
Nom_procédure [ (liste d’arguments)] { IS| AS}
[ variables locales ]
Corps PL-SQL
syntaxe: Fonction
CREATE [ OR REPLACE ] FUNCTION
Nom_fonction [ (liste d’arguments)] RETURN typeSQL { IS| AS}
[ variables locales ]
Corps PL-SQL

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 1
Procédures et fonctions : Création

© Base de données Avancees / M.MOURCHID, 2022-2023

Procédures et fonctions
L’option OR REPLACE permet de spécifier au système le remplacement de la
procèdure ou de la fonction si elle existe déjà dans la BD.
liste d’arguments: nom_arg ( IN| OUT| IN OUT ) type
 IN: permet de passer une valeur de l’environnement appelant à la
procédure ou la fonction.
 OUT: permet à une procédure de retourner une valeur à l’environnement
appelant.
 IN OUT: permet d’utiliser un même paramètre pour passer une valeur de
l’environnement appelant à la procédure, puis d’obtenir une valeur en
retour de l’exécution de la procédure.
le mot RETURN permet de spécifier le type de la donnée retour.
Le corps PL/SQL doit commencer par le mot clé BEGIN et se termine par
END. Il peut être composé d’une partie déclarative , d’un corps de la
procédure et d’un gestionnaire d’erreurs.

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 2
Exemples

Exemple : Créer une procédure qui permet d’augmenter le prix d’un


produit par un taux.
CREATE PROCEDURE augmentation_prix ( numerop IN NUMBER, Taux
IN NUMBER ) IS
non_trouve Excpetion;
BEGIN
UPDATE produit SET PU= PU* ( 1+Taux)
WHERE Numprod= numerop ;
if ( SQL%NOTFOUND ) THEN
RAISE non_trouve;
EXCEPTION
WHEN non_trouve THEN
dbms_output.put_line ( ‘produit non trouvé ‘ );
END ;
© Base de données Avancees / M.MOURCHID, 2022-2023

Exemples

Exemple : Créer une fonction qui retourne le nom d’un employé.


employe (numemp, nomemp, salaire, date_embauche )
CREATE FUNCTION nom_employe ( numero IN NUMBER ) RETURN
VARCHAR2
IS
nom employe. nomemp%type ;
BEGIN
SELECT nomemp into nom
FROM employe
WHERE numemp = numero ;
RETURN( nom);
END ;

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 3
Exemples
Exemple : Créer une procédure, ayant comme paramètre le numéro d’un
employé, qui retourne les informations de l’employé passé en
paramètre .
employe (numemp, nomemp, salaire, date_embauche )
CREATE PROCEDURE REQ_EMPLOYE
( numero IN employe.numemp%type,
nom_e OUT employe.nomemp%type,
sal_e OUT employe.salaire%type,
date_e OUT employe.date_embauche%type)
IS
BEGIN
SELECT nomemp, salaire, date_embauche
into nom_e, sal_e, date_e
WHERE numemp = numero ;
END ;
© Base de données Avancees / M.MOURCHID, 2022-2023

Différences entre procédure et fonction


Procédures et fonctions diffèrent dans leur mode de lancement et le retour de données

PROCEDURE FONCTION

Instruction PL/SQL Partie d’une expression


Lancement
EXECUTE nom_procédure; - - - := nom_fonction;

Type de données
Non Oui
RETURN

Renvoie
Possible Oui
un paramètre
RETURN résultat;

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 4
Utilisation d’une procédure ou fonction)

Une fois une procédure ou une fonction compilée et stockée, son


utilisation se fait par référence à son nom, avec transmission des
valeurs des paramètres en entrée le cas échéant.
Le mode d’appel est différent selon l’environnement à partir duquel
la procédure ou la fonction est employé.
Une procédure, comme une fonction, peut être appelée à l’aide de
l’interface de commande SQL*Plus (commande EXECUTE) ou par
l’intermédiaire d’un outil d’Oracle (Forms par exemple), dans un
programme externe (Java, C…), par d’autres procédures ou
fonctions ou dans le corps d’un déclencheur (triggerr). Les fonctions
peuvent être appelées dans une instruction SQL (SELECT, INSERT,
et UPDATE).

© Base de données Avancees / M.MOURCHID, 2022-2023

Utilisation d’une procédure ou fonction

Exemples:
+Sous SQL PLUS:
1) EXECUTE augmentation_prix( 1, 0.2);
2) VARIABLE nom varchar2(30)
EXECUTE :nom= nom_employe (2) ;
PRINT nom;
+ A partir d’un bloc PL/SQL
DECLARE V_numP NUMBER := 14
BEGIN
augmentation_prix( V_numP, 0.1);
END ;

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 5
Méthodes de transfert des paramètres
L’appel d’un sous programme avec argument(s) respecte des règles

L’appel d’un sous-programme ( procedure ou fonction) peut être


positionnel, mot clé (nommé) ou mixte.

Méthode Description
Positionnement Liste les valeurs dans l'ordre dans lequel les paramètres sont déclarés
Association nom Liste les valeurs dans un ordre arbitraire en associant chacune avec le
nom de son paramètre en utilisant la syntaxe spéciale (=>)
Combinaison Liste les premières valeurs par positionnement, et les suivantes en
utilisant la syntaxe spéciale de la méthode Nom

© Base de données Avancees / M.MOURCHID, 2022-2023

Méthodes de transfert des paramètres


L’appel d’un sous programme avec argument(s) respecte des règles

L’appel d’un sous-programme ( procedure ou fonction) peut être


positionnel, mot clé (nommé) ou mixte.

Paramètres positionnels augmentation_prix( 1, 0.2)

Paramètres mot clé augmentation_prix( Taux=>0.2, numerop=>1)

Mixtes augmentation_prix( 1, Taux=>0.2)

Attention: Pour tous les appels mixtes, il faut que les notations
positionnelles précèdent les notations nommées.

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 6
Utilisation Option DEFAULT pour les paramètres

Exemple: Dept ( Ndept, Nomdep, Ville)


Create sequence seq_dep start with 1
CREATE OR REPLACE PROCEDURE add_dept
(v_name IN dept.dname%TYPE DEFAULT 'unknown',
v_loc IN dept.loc%TYPE DEFAULT 'unknown')
IS
BEGIN
INSERT INTO dept
VALUES (seq_dep .NEXTVAL, v_name, v_loc);
END add_dept;
/

© Base de données Avancees / M.MOURCHID, 2022-2023

Exemples de transfert de paramètres

BEGIN
add_dept;
add_dept ( ‘INFORMATIQUE', ‘RABAT');
add_dept ( v_loc => ‘KENITRA‘,v_name =>‘COMPTABILITE');
add_dept ( v_loc => ‘CASA') ;
END;
/

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 7
Modification d’une procédure ( fonction)

Si la base de données évolue, il faut recompiler les procédures


existantes pour qu’elles tiennent compte de ces modifications.
La commande est la suivante:
ALTER { FUNCTION | PROCEDURE } nom COMPILE
Exemple:
ALTER PROCEDURE augmentation_prix COMPILE;

© Base de données Avancees / M.MOURCHID, 2022-2023

Suppression d’une procédure ( fonction)

Lorsqu'une procédure ( ou fonction) stockée n'est plus requise,


vous pouvez la supprimer.
DROP { FUNCTION |PROCEDURE } nom

© Base de données Avancees / M.MOURCHID, 2022-2023

Page 8

Vous aimerez peut-être aussi