Académique Documents
Professionnel Documents
Culture Documents
Langage PL/SQL
ENSA4
Génie Informatique
Procédure
Stockées
Généralités
Oracle
Procedure
Builder Edit Fichier
source
Editeur 1
Stocké
dans la base
Code
Source
2
Compilation
p-code
Exécution
4
CHAOUKI
Syntaxe pour créer une
procédure
5
CHAOUKI
Paramètre de procédure
Procédure
IN paramètre
Environnement
OUT paramètre
d’appel
IN OUT paramètre
(DECLARE)
BEGIN
EXCEPTION
END;
6
CHAOUKI
Mode IN : Exemple
7369 v_id
7654 v_id
MARTIN v_name
1250 v_salary
1400 v_ comm
8
CHAOUKI
Mode OUT : Exemple
9
CHAOUKI
Mode OUT et SQL*Plus
10
CHAOUKI
Mode IN OUT : Exemple
Environnement Procédure FORMAT_PHONE
11
CHAOUKI
Appel d’une procédure
dans SQL*Plus
G_PHONE_NO
---------------
(800)633-0575
12
CHAOUKI
Passer des paramètres
13
CHAOUKI
Appel d’une procédure
dans une autre procédure
BEGIN
7 FOR emp_rec IN emp_cursor LOOP
8 raise_salary(emp_rec.empno); --appel procédure
par son nom
9 END LOOP;
10 COMMIT;
11 END process_emps;
12 /
14
CHAOUKI
Compilation & Suppression d’une
Procédure
• Suppression
DROP PROCEDURE nom_procédure
• Exemple
SQL> DROP PROCEDURE salary;
Procedure dropped.
15
CHAOUKI
Gestion des erreurs :erreur générée
par l’utilisateur
CREATE PROCEDURE verif_comm
(x_nopilote IN pilote.nopilote%type)
IS
dif pilote.sal%type := 0;
BEGIN
SELECT sal - NVL(comm,0)
INTO dif
FROM pilote
WHERE nopilote = x_nopilote;
IF dif < 0 THEN
RAISE_APPLICATION_ERROR
(-20001,'commission supérieure au salaire');
END IF;
END verif_comm;
16
–-NVL(x, val) : Remplace par val si x a la valeur NULL
CHAOUKI
Gestion des erreurs :erreur générée
par l’utilisateur
CREATE PROCEDURE del_pilote(x_no_pilote IN pilote.nopilote%type)
IS
VAR_NOM pilote.nom%type;
erreur-affect EXCEPTION ;
BEGIN
SELECT nom INTO VAR_NOM FROM affectation
WHERE pilote = x_nopilote;
RAISE erreur-affect ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DELETE FROM pilote WHERE nopilote = x_nopilote ;
WHEN erreur-affect THEN
INSERT INTO error_tab
VALUES ('Le pilote de numéro : ' || x_nopilote || ' est
déjà affecté');
17
END del_pilote;
CHAOUKI
Fonctions
Stockées
Syntaxe pour créer une
Fonction
19
CHAOUKI
Création d’une fonction avec
SQL*Plus : Exemple
RETURN v_salary
SQL> START get_salary.sql
Procedure created.
SQL> VARIABLE g_salary number
SQL> EXECUTE :g_salary := get_sal(7934)
PL/SQL procedure successfully completed.
21
CHAOUKI
Fonction dans l’ordre SQL
22
CHAOUKI
Fonction utilisateur : Restrictions SQL
• Obligatoirement une fonction stockée.
• N’utilise que des paramètres de mode IN.
• Le type de données retourné est limité à
CHAR,VARCHAR2, DATE, ou NUMBER .
• Les paramètres d’une fonction appelée doit utiliser la
notation par position.
• Les ordres INSERT, UPDATE, ou DELETE ne sont pas
autorisés dans le corps de la fonction.
• Les fonctions PL/SQL stockées ne peuvent pas être
appelées depuis la clause CHECK d’une commande
CREATE ou ALTER TABLE ni être utilisée pour spécifier
une valeur par défaut pour une colonne.
• Les procédures / fonctions appelées dans le corps de la
fonction doivent respecter les restrictions précédentes.
23
CHAOUKI
Suppression d’une Fonction
En utilisant SQL*Plus
• Par l’ordre DROP FUNCTION
• Syntaxe
DROP FUNCTION nom_fonction
• Exemple
(DECLARE) (DECLARE)
BEGIN BEGIN
EXCEPTION EXCEPTION
END; END;
25
CHAOUKI
Procédure ou Fonction?
Procédure Fonction
Exécutée comme une Utilisée dans une expression
instruction PL/SQL
Pas de type de retour Type de RETOUR défini
26
CHAOUKI